2

いくつかの条件が満たされたときに特定の型を注入したい。たとえば、私は以下のようなインターフェースを持っています。

public interface IMyInterface{

}

また、このインターフェースを実装する 2 つのクラス

public class MyClassA : IMyInterface {
}

public class MyClassB : IMyInterface {
}

最後に、IMyInterface としてコンストラクター パラメーターを取得するサービス クラスがあります。

public class ServiceA{
private IMyInterface _interfaceClass;
public ServiceA(IMyInterface interfaceClass){
_interfaceClass = interfaceClass
}
}

public class ServiceB{
private IMyInterface _interfaceClass;
public ServiceA(IMyInterface interfaceClass){
_interfaceClass = interfaceClass
}
}

現在、いくつかのアーキテクチャ上の制約により、ServiceA は MyClassA をコンストラクター パラメーターとして取得し、ServiceB は MyClassB をコンストラクター パラメーターとして取得する必要があります

通常、私は以下のようにAutofacを使用しています

var builder = new ContainerBuilder();
builder.RegisterType<MyClassA>().As<IMyInterface>().InstancePerApiRequest();

しかし、特定のタイプに適したタイプを Autofac に強制的に選択させる方法が見つかりませんでした。機能を探しましNamed<>たが、問題を解決できませんでした。

4

1 に答える 1

2

Liskovの置換原則に違反しているようです

現在、いくつかのアーキテクチャ上の制約により、ServiceA はコンストラクター パラメーターとして MyClassA を取得する必要があり、ServiceB はコンストラクター パラメーターとして MyClassB を取得する必要があります。

Autofac がコンテキスト ベースのインジェクションをサポートしているかどうかはわかりません。必要な実装に各 Service を依存させてみませんか?

public class ServiceA
{
    private IMyInterface _interfaceClass;
    public ServiceA(MyClassA interfaceClass)
    {
        _interfaceClass = interfaceClass
    }
}
于 2013-05-23T13:47:33.913 に答える