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