gpt4 book ai didi

.net - 服务定位器 - 值得吗?

转载 作者:行者123 更新时间:2023-12-04 13:53:00 26 4
gpt4 key购买 nike

我们有一个大型解决方案(> 100 个项目),几乎每种类型都使用服务定位器(示例 1)或我们自己的类型字典(示例 2)进行实例化。

例如我们有:

IQuote quote = Registry.Resolve<IQuote>(); 

或者
IQuote quote = Registry.Find<IQuote>(args);

第二个示例转到配置文件以查找要使用反射实例化的具体对象。

跟踪代码时会变得更加困难——因为不清楚使用的是什么具体类型——所以我们必须多次检查映射,因为我们试图学习代码的一部分。以上述为例,按 F12 键: quote.DoSomething()将带您进入接口(interface)定义。

实现起来也有点困难——我们需要一个接口(interface) + 具体类 + 配置映射,而替代方案只有 1 个类。

想一想——我不知道有任何东西被“换掉”为另一种类型——所以虽然我们已经实现了 IoC,但我们没有使用它,或者至少——很少使用它。

所以 - 它真的值得吗?我们是否错误地/太多地实现了它?我是不是误会了什么?

最佳答案

你们使用的是服务定位器这被认为是一种反模式,
因为:

  • 所有单元测试都必须使用 服务定位器 (涉及 DI 号 DI 容器 )
  • 您将整个架构耦合到服务定位器(在 DI 中,只有 Composition Root 使用 DI 容器 )
  • 您无法立即看到组件的依赖关系( DI 构造函数注入(inject) )
  • 您的单元测试变得更加复杂,因为您必须关心您的配置,以免其他测试错误地使用另一个配置(Tear Down)。

  • http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx

    关于.net - 服务定位器 - 值得吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11283595/

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