依赖注入 – 使用IOC容器,服务定位器和工厂时感到困惑
假设我有一个依赖于ILogger或IResourceManager的BaseForm或类似的东西.目前,它使用服务定位器解决了所需服务的正确实现,我知道这是一种反模式.
>使用构造函数注入正确的方法来解决这种依赖吗? 很抱歉一次提出很多问题.我已经阅读了以下SO问题和许多其他问题,但阅读它们只会增加我的困惑: > How to use Dependency Injection and not Service Locator 解决方法
如果可能的话,你应该总是使用依赖注入,因为它有一些明确的力量.但是,使用UI技术,并不总是可以使用依赖注入,因为某些UI技术(例如.NET空间,Win Forms和Web窗体)只允许您的UI类(窗体,页面,控件等)具有默认构造函数.在这种情况下,你将不得不回到其他东西,即服务定位器.
在这种情况下,我可以给你以下建议: >只回退到服务定位器,用于使用依赖注入无法通过容器创建的UI类,以及无论如何都不是单元测试的东西. 除了单元测试之外,还有另外两个反对使用服务定位器的重要论据,由Mark Seemann在他着名的博客文章Service Locator is an Anti-Pattern中给出: >服务定位器“隐藏类”依赖项,导致运行时错误而不是编译时错误“>服务定位器“使代码更难维护” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |