假设我有BaseForm
取决于ILogger
或IResourceManager
或类似的东西。目前,它使用服务定位器解决了所需服务的正确实现,我知道这是一种反模式。
BaseForm
(及其'派生类型)才能创建具有已解析依赖关系的实例?这不会使一切变得复杂吗?很抱歉一次提出很多问题。我已经阅读了以下SO问题和许多其他问题,但阅读它们只会增加我的困惑:
答案 0 :(得分:8)
如果可能的话,你应该总是选择依赖注入,因为它有一些明确的力量。但是,使用UI技术,并不总是可以使用依赖注入,因为某些UI技术(例如.NET空间,Win Forms和Web窗体)只允许您的UI类(窗体,页面,控件等)具有默认构造函数。在这种情况下,你将不得不回到其他东西,即服务定位器。
在这种情况下,我可以给你以下建议:
除了单元测试之外,还有另外两个反对使用服务定位器的重要论据,由Mark Seemann在其着名的博客文章Service Locator is an Anti-Pattern中提供: