0

有谁知道一组类来抽象出特定的依赖注入库(Spring、Castle、StructureMap、Ninject ......等)?

我们都使用 DI 容器来抽象出我们代码的特定实现,但我们也可以使用相同的接口/策略模式来使用特定实现(例如 Castle.Windsor、Unity... 等)编写基于通用接口的 DI 容器。

一般来说,从容器中“获取和对象”的基本模式是非常普遍的。例如:

IService service = IocContainer.Get<IService>();

其中 IocContainer 是围绕特定库实现(例如 Castle.Windsor、Unity... 等)的通用包装类。

当然,除了编写可以“插入”的特定实现之外,当然,每个实现都有自己的配置文件格式。

有人对 DI 容器的现有经过良好测试的包装类有建议吗?

4

1 回答 1

3

所有这些包装器和容器抽象的问题在于它们将您限制在所有容器共享的功能的公共子集上。这就是为什么你不应该这样做。而是正确使用您选择的容器:

  1. 在您的应用程序中只有一个“Get” - 在组合根中
  2. 使用约定配置容器,而不是在一个一个一个的服务注册中使用。这使得配置很小。
  3. 在应用程序初始组合之后必须创建实例并将它们作为容器配置的一部分实现的任何地方都使用工厂接口(某些容器会自动为您执行此实现)

使用这些简单的规则,您的容器仅在一个地方已知 - 组合根 - 这使得容器的任何抽象都过时了。这样您就可以使用容器的全部功能。

于 2012-04-23T23:39:49.860 回答