AutofaC语言 一个接口,多个实现



单个接口:IDoSomething {...}

两个类实现该接口:

ClassA : IDoSomething {...}
ClassB : IDoSomething {...}

一个类使用这些类中的任何一个。

public class DummyClass(IDoSomething doSomething) {...}

没有自动法的代码:

{
....
IDoSomething myProperty;
if (type == "A")
myProperty = new DummyClass (new ClassA());
else
myProperty = new DummyClass (new ClassB());

myProperty.CallSomeMethod();
....
}

是否可以使用 Autofac 实现类似的东西?

提前感谢,

我记得,你正在寻找的是策略模式。您可能有 N 个单个接口的实现。只要您全部注册它们,Autofac 或任何其他 DI 框架都应该提供它们。

其中一个选项是使用私有 setter 或仅在 Interface 中创建属性的声明,然后在每个类中实现该属性。在需要选择正确实现的类中,构造函数应具有参数IEnumerable<ICommon>

Autofac或任何其他DI框架应该注入所有可能的实现。之后,您可以旋转foreach并搜索所需的属性。

它可能看起来像这样。

public interface ICommon{ 
string Identifier{get;}
void commonAction();
}
public class A: ICommon{
public string Identifier { get{return "ClassA";}  }
public void commonAction()
{
Console.WriteLine("ClassA");
}
}
public class A: ICommon{
public string Identifier { get{return "ClassB";}  }
public void commonAction()
{
Console.WriteLine("ClassA");
}
}
public class Action{
private IEnumerable<ICommon> _common;
public Action(IEnumerable<ICommon> common){
_common = common;
}
public void SelectorMethod(){
foreach(var classes in _common){
if(classes.Identifier == "ClassA"){
classes.commonAction();
}
}
}
}

最新更新