あなたがしたいことは、Simple Injectorでは特別なものは必要ありません。シンプルインジェクターを自動であなたのための任意のタイプを選択します。次のタイプを仮定:
class Implementation1 : IMyInterface<MyClass> { }
class Implementation2 : IMyInterface<MyClass> { }
class Implementation3 : IMyInterface<FooBarClass>, IMyInterface<MyClass> { }
次のように登録になります。
container.RegisterCollection(typeof(IMyInterface<>), new[] {
typeof(Implementation1),
typeof(Implementation2),
typeof(Implementation3),
});
これは、次になります:
// returns: Implementation1, Implementation2, Implementation3.
container.GetAllInstances<IMyInterface<MyClass>>();
// returns: Implementation3.
container.GetAllInstances<IMyInterface<FooBarClass>>();
// returns: empty list.
container.GetAllInstances<IMyInterface<AnotherClass>>();
代わりに、手動ですべてのタイプを登録し、あなたもできます一括登録を使用します。
container.RegisterCollection(typeof(IMyInterface<>),
typeof(Implementation1).Assembly);
これはすべての実装を登録します(すべてが同じアセンブリ内にあると仮定します)。場合
しかし、あなたは、次の種類があります。
class Implementation1<T> : IMyInterface<T> { }
class Implementation2<T> : IMyInterface<T> { }
class Implementation3<T> : IMyInterface<T> { }
あなたは、以下の登録を行うことができます。
:私たちは前に見てきたように、この登録は、同じ結果につながる
container.RegisterCollection(typeof(IMyInterface<>), new[] {
typeof(Implementation1<MyClass>),
typeof(Implementation2<MyClass>),
typeof(Implementation3<MyClass>),
typeof(Implementation3<FooBarClass>),
});
を
// returns: Implementation1<MyClass>, Implementation2<MyClass>, Implementation3<MyClass>.
container.GetAllInstances<IMyInterface<MyClass>>();
// returns: Implementation3<FooBarClass>.
container.GetAllInstances<IMyInterface<FooBarClass>>();
// returns: empty list.
container.GetAllInstances<IMyInterface<AnotherClass>>();
詳細については、collections sectionおよびを参照してください。を参照してください。
関連:https://github.com/simpleinjector/SimpleInjector/issues/283 – Steven
実装がコレクションに表示される条件を説明(または表示)できますか? – Steven
その情報がなければ、あなたに良い答えを与えることは不可能です。 – Steven