单个接口: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();
}
}
}
}