ZuT*_*uTa 1 .net c# dependency-injection inversion-of-control unity-container
我有一个大班级.当我的应用程序启动时,我初始化UnityContainer对象并进行配置.之后,我总是将它通过构造函数传递给层次结构中的另一个类.像这样的东西:
Unity容器将这些类作为注册:IClassA,IClassB,IClassC,IClassD
接口的所有具体实现都具有带IUnityContainer参数的构造函数.例如,
public class ClassA : IClassA
{
public ClassA(IUnityContainer unityContainer)
{
}
}
Run Code Online (Sandbox Code Playgroud)
因此,每当我创建某个类的新实例时,我必须传递IUnityContainer的对象.
我可以减少传递IUnityContainer对象的数量作为构造函数的参数吗?也许通过使用Dependency属性?
是的,你应该减少它.
你应该把它减少到0.
像这样使用DI容器是一种不好的做法.不要将DI容器当作神奇的超级工厂.
您应该只使用容器来更容易在组合根目录下编写应用程序:阅读本文
您的代码不应该知道它是由DI容器组成的,容器只是一种技术,而DI是一种技术.您也应该能够在没有容器的情况下编写应用程序.
那么,你如何减少它?像这样:
public class ClassA : IClassA
{
public ClassA()
{
}
}
Run Code Online (Sandbox Code Playgroud)
然后,如果您ClassA需要某些东西(依赖项,接口),那么您应该通过构造函数注入它.
public class ClassA : IClassA
{
private readonly IComponent _component;
public ClassA(IComponent component)
{
_component = component;
}
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用其他注入模式:属性注入,方法注入,环境上下文.
如果您使用类似问题的容器,则隐藏实际类的所有依赖项.你无法弄清楚实际的类需要工作什么,因为它将使用容器来解决特定的问题.它完全取决于依赖注入,因为你不注入依赖关系,你只需注入一个通用工厂(你可以要求任何东西),这是非常危险的,并且大大增加了复杂性.
我强烈推荐这本书:.NET中的依赖注入 - Mark Seemann
| 归档时间: |
|
| 查看次数: |
1085 次 |
| 最近记录: |