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