コンストラクター引数としてインターフェースを取るクラスがあります。このインターフェイスには2つの実装があり、変数に基づいて実行時に使用する実装を決定したいと思います。
問題は、上記のクラスがAutofacによって解決されるオブジェクト階層の奥深くにあるため、引数を渡すことができないことです。
以下のようなものが私が達成しようとしていることです。
public interface IInterface1 {}
public interface IInterface2 {}
public class Class1 : IInterface2
{
public Class1(IInterface1 interface1)
{
}
}
public class Class2
{
public Class2(IInterface2 interface2)
{
}
}
public class Class3
{
public void GetClass2Instance(string interface1ImplementationToChoose)
{
// want to change which implementation of IInterface1 is resolved based on the interface1ImplementationToChoose variable
var class2 = container.Resolve<Class2>();
}
}
何か案は?
アップデート:
明確にするために、これは正常に動作する既存のアプリケーションによって使用される既存のオブジェクト階層です。また、オブジェクトモデルは、この例に示されているものよりもはるかに大きくなっています。結果として、オブジェクトグラフの各コンストラクターにファクトリを渡して、そのグラフの深いクラスで使用する必要はありません。
Class2がそれについて何も知らずにIInterface1の別の実装をClass1に渡す方法はありますか?
ありがとう