c# – 如何避免与IoC容器耦合

我正在使用DI和IoC开发可扩展框架.用户必须能够通过将自己的实现放入容器中来覆盖框架内的现有功能.

如何让用户在不要求他们知道我正在使用哪个IoC容器的情况下执行此操作?

我目前的中途解决方案是按如下方式构建我的程序集:

1)定义仅包含接口的抽象程序集.

2)定义实现这些接口的具体组件.用户可以定义自己的内容以覆盖现有功能.

3)在单独的程序集中定义容器绑定;即每个混凝土组件一个装订组件.

这意味着混凝土组件不与特定的IoC容器耦合,如果我使用不同的容器,它们将被关闭以防止更改.但是,用户仍然需要知道我的框架正在使用哪个容器来编写绑定程序集,如果我更改了IoC容器(即从Ninject到Spring),他们需要释放新的绑定程序集.

我错过了什么吗?

解决方法

Common Service Locator是一种方法,但它只包含解析方法,而不是注册方法.

您可能想看一下agatha-rrsl project中如何实现它.有一个更完整的解释here,但简而言之:

>定义与容器无关的接口,用于注册和解析类型
>提供不同容器的实现(或让用户提交实现)

警告:您可能无法在库中直接使用您选择的容器.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString("x2"));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable<Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include "WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...