前段时间我有一个类似的问题,但对整个 IoC/DI 主题以及我想要实现的目标的掌握要少得多,所以又来了....
我正在建立一个图书馆供我们公司内部使用。公共 API 中最常用的部分已经对 IoC 友好,但在较低级别的区域中,仍有相当多的新功能在进行,我想摆脱它们(尽管此时更多是出于正式原因而不是实际原因必要性)。
这本身很容易做到,但是当然每次使用库时,都必须重新连接所有组件。由于这看起来几乎总是一样的,我通常只是将这些默认注册包装在 Autofac 模块中并完成它。
(这里的问题 1:这个模块是放在主库程序集中还是应该是一个独立的包,即使 Autofac 可能是库中唯一使用的 IoC 容器?)
现在的问题是,我是公司目前唯一真正了解 IoC 目的或知道 IoC 容器做什么的开发人员,更不用说它是如何使用的了,告诉其他人他们是一个坏主意可以使用 Autofac 包,也可以使用穷人的 DI 手动构建十几个对象的图形。(我认识这些人——他们只会不理会它,自己建造他们需要的东西,因为无论如何我对我所有的小班都很疯狂。)
我想解决这个问题的是添加类似服务定位器的东西,从中提取常用类型的预配置对象(看起来与 Autofac 模块连接的那些相同),可能由轻量级 IoC 容器在内部连接.
我知道服务定位器是一种反模式以及它会产生哪些类型的问题,我永远不会将其用作(我的)对象组合方式,而是作为 IoC/SOLID 受损的“捷径”,是否可行? 我还有什么其他选择?在这种情况下,将 Autofac 模块包含在库中并让“服务定位器”充当它的前端是否有意义?