列表中的控制反转
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) 的方法。
- 构造函数注入:
public MyClass(List<IMyInterface> tobeInjectedList)
- 属性注入:
public List<IMyInterface> TobeInjectedList { get; set; }
方法注入:
List<IMyInterface> _injectedList;
public void Inject(List<IMyInterface> tobeInjectedList)
{
_injectedList = tobeInjectedList;
}
我从你的代码中注意到的一个附带问题是你过度使用了 new
关键字,这会使你 class 严重依赖于其他一些 classes,基本上是维护的噩梦。我建议使用工厂设计模式来解决这个问题。
我一直在思考在处理列表时控制反转如何工作。例如,像这样的东西可以正常工作:-
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) 的方法。
- 构造函数注入:
public MyClass(List<IMyInterface> tobeInjectedList)
- 属性注入:
public List<IMyInterface> TobeInjectedList { get; set; }
方法注入:
List<IMyInterface> _injectedList; public void Inject(List<IMyInterface> tobeInjectedList) { _injectedList = tobeInjectedList; }
我从你的代码中注意到的一个附带问题是你过度使用了 new
关键字,这会使你 class 严重依赖于其他一些 classes,基本上是维护的噩梦。我建议使用工厂设计模式来解决这个问题。