我正在使用 DI 和 IoC 开发一个可扩展的框架。用户必须能够通过将自己的实现放入容器中来覆盖框架内的现有功能。
我怎样才能允许用户执行此操作而不要求他们知道我使用的是哪个 IoC 容器?
我目前的中途解决方案是按如下方式构建我的程序集:
1) 定义只包含接口(interface)的抽象程序集。
2) 定义实现这些接口(interface)的具体程序集。用户可以定义自己的功能以覆盖现有功能。
3) 在单独的程序集中定义容器绑定(bind);即每个具体组件一个绑定(bind)组件。
这意味着具体组件没有与特定的 IoC 容器耦合,如果我使用不同的容器,它们将因更改而关闭。但是,用户仍然需要知道我的框架正在使用哪个容器来编写绑定(bind)程序集,并且如果我更改了 IoC 容器(即从 Ninject 到 Spring),他们将需要发布新的绑定(bind)程序集。
我错过了什么吗?
最佳答案
Write loosely coupled code .应用程序应该依赖于容器。 Frameworks不应该。
关于c# - 如何避免与 IoC 容器耦合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5789593/