Unityで登録を設定しようとしていますが、私が必要とするものを正確に取得できません。インスタンスを要求しているクラスに基づいてUnityを解決します
私は以下の定義を持っている想像して次のように
public interface ISomeInterface { ... }
public interface ISomeDependency { ... }
public class DependencyA : ISomeDependency { ... }
public class DependencyB : ISomeDependency { ... }
public class SomeClassA : ISomeInterface
{
public SomeClassA(ISomeDependency dep){ ... }
}
public class SomeClassB : ISomeInterface
{
public SomeClassB(ISomeDependency dep){ ... }
}
は、私はその後、ユニティに登録:
Container.RegisterType<ISomeDependency, DependencyA>("DependencyA");
Container.RegisterType<ISomeDependency, DependencyB>("DependencyB");
Container.RegisterType<ISomeInterface, SomeClassA>("ClassA");
Container.RegisterType<ISomeInterface, SomeClassB>("ClassB");
私もISomeInterface
オフに基づいてキーを構築する工場を登録します。私はUnityは、このようなUnityは私にSomeClassAのインスタンスを構築するとき、それはまたすることを設定することができますどのように
Container.RegisterType<Func<string, ISomeInterface>(new InjectionFactory(c=>
{
return new Func<string, ISomeInterface>(x=>
{
return c.Resolve<ISomeInterface>(x)
}
}));
(誰でもキー付き工場を作成するためのより良い方法を知っていればちなみに、私は先端を歓迎したい)
DependencyAのインスタンスを挿入しますか? Unityが私にSomeClassBのインスタンスを構築するときと同じように、DependencyBのインスタンスを挿入します。
あなたのお手伝いをお待ちしております。
編集:あなたは一つのインタフェースのための2つの具体的なタイプを登録する場合は、Unityが解決するかを知ることができません
同じオブジェクトグラフで同じインターフェイスの複数の実装を開始したら、[Pure DI](http://blog.ploeh.dk/2014/06/10/pure-di/)が最適なオプションになります。詳細はこの記事をご覧ください:http://criticalsoftwareblog.com/index.php/2015/08/23/why-di-containers-fail-with-complex-object-graphs/ –
工場抽象化の使用(たとえあなたが 'Func'を使っていても)典型的には[デザインの匂い](https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=100)です。 –
Steven