gpt4 book ai didi

c# - 为什么 IOC 容器被认为是一种减少耦合的方式?

转载 作者:太空宇宙 更新时间:2023-11-03 17:15:45 24 4
gpt4 key购买 nike

我正在考虑在我的项目中使用 DI 和 Unity。我有一个问题:它将如何减少耦合?从我的角度来看,它正在增加耦合,因为:

  1. 我需要创建 UnityContainer 并在其中注册所有类型。这意味着我需要引用创建此容器的程序集中的所有程序集。

    IUnityContainer UnityContainer;
    //....
    IUnityContainer UnityContainer= new UnityContainer();
    UnityContainer.RegisterType<IMyService, CustomerService>();
  2. 我需要使用 Resolve 创建我的服务实例,但这意味着我需要引用容器组装。

    var service = SomeClassWithContainer.UnityContainer.Resolve<IMyService>();

我是不是误解了什么,或者实际上它正在增加耦合?

最佳答案

我认为您误解了应该如何解决您的依赖关系。

1.) 仅在您的引导代码中需要对 Unity 的引用,该代码位于应用程序的单个中心位置。

2.) 引导完成后,所有依赖项(理想情况下)都将使用构造函数注入(inject)来解析,如果包含类是通过 Unity 解析的,则由 Unity 自动完成 - 它会向下渗透对象图。您使用的示例实际上只是“服务定位器”模式而不是 DI。

这确实减少了耦合,因为你不是直接创建你的类所依赖的具体类,而是将依赖项“注入(inject)”到你的类中(理想情况下也是一些抽象,如接口(interface)),这允许你用其他类替换这些依赖项,即在单元测试场景。

关于c# - 为什么 IOC 容器被认为是一种减少耦合的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7217012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com