我们有一个大型解决方案(> 100 个项目),几乎每种类型都使用服务定位器(示例 1)或我们自己的类型字典(示例 2)进行实例化。
例如我们有:
IQuote quote = Registry.Resolve<IQuote>();
或者
IQuote quote = Registry.Find<IQuote>(args);
第二个示例转到配置文件以查找要使用反射实例化的具体对象。
跟踪代码时会变得更加困难——因为不清楚使用的是什么具体类型——所以我们必须多次检查映射,因为我们试图学习代码的一部分。以上述为例,按 F12 键:
quote.DoSomething()
将带您进入接口(interface)定义。实现起来也有点困难——我们需要一个接口(interface) + 具体类 + 配置映射,而替代方案只有 1 个类。
想一想——我不知道有任何东西被“换掉”为另一种类型——所以虽然我们已经实现了 IoC,但我们没有使用它,或者至少——很少使用它。
所以 - 它真的值得吗?我们是否错误地/太多地实现了它?我是不是误会了什么?
最佳答案
你们使用的是服务定位器这被认为是一种反模式,
因为:
http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx
关于.net - 服务定位器 - 值得吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11283595/