列表中的控制反转

Inversion of Control on a list

我一直在思考在处理列表时控制反转如何工作。例如,像这样的东西可以正常工作:-

public class MyClass
{
private readonly IMyInterface _instance;

public MyClass(IMyInterface instance)
{
   _instance = instance;
}

下面是否违反了 Open/Closed SOLID 设计原则,如果是,如何使用 IoC 实现列表,如上例所示?

private readonly List<IMyInterface> _interface;

    public MyClass()
    {
        _interface= new List<IMyInterface>();
        _interface.Add(new Class1());
        _interface.Add(new Class2());
        _interface.Add(new Class3());
    }
...

我的意思是如何实现列表集合并使用 IoC 将其传递给构造函数?

有 3 种存档依赖注入 (DI) 的方法。

  1. 构造函数注入:public MyClass(List<IMyInterface> tobeInjectedList)
  2. 属性注入:public List<IMyInterface> TobeInjectedList { get; set; }
  3. 方法注入:

    List<IMyInterface> _injectedList;
    public void Inject(List<IMyInterface> tobeInjectedList) 
    { 
        _injectedList = tobeInjectedList; 
    }
    

我从你的代码中注意到的一个附带问题是你过度使用了 new 关键字,这会使你 class 严重依赖于其他一些 classes,基本上是维护的噩梦。我建议使用工厂设计模式来解决这个问题。

http://www.dofactory.com/net/factory-method-design-pattern