很长一段时间以来,我们很幸运有了公共服务定位器(CSL)来解决来自未知来源的服务.但是,从来没有任何与容器无关的解决方案首先注册这些服务.我们一直面临着必须将组合代码耦合到特定IoC容器的问题,此外,还致力于在整个应用程序中使用该容器.
我觉得我可能试图在这里实现不可能,但是有没有人对如何实现公共服务注册表(CSR)有任何想法?
我最初的想法是使用MEF来解析各种IContainerIntegrators(每个容器技术一个类),然后使用MEF来解析各种IXXXContainerBindings(每种技术的一个接口).然后,用户可以围绕容器绑定开发应用程序,只需将其绑定放入BIN目录即可实现插件体系结构.如果他们想要使用新的容器技术,那么他们只需要开发一个新的IContainerIntegrator类和附带的IXXXContainerBinding,然后他们将用它们来编写自己的绑定.在应用程序启动时,CSR使用ServiceLocatorAggregator类将所有容器实例聚合到单个CSL中.
我有这个工作,但面临以下问题:
如果我完全忽略了这一点,请大声喊叫,但这不是依赖管理最脱钩的解决方案吗?不是很好吗?我即将开始使用插件架构开展大型企业项目.我不想承诺特定的IoC容器.
(ps这个问题是关于容器不可知的组合,它支持发现.请不要进入关于SL与DI的争论.在组合中使用SL,这就是我在这里引用它的原因).
.net c# dependency-injection ioc-container inversion-of-control