使用Common Wrapper类的依赖注入库不可知代码?

时间:2012-04-23 23:16:54

标签: dependency-injection wrapper

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

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

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

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

IocContainer是围绕特定库实现的通用包装类,例如Castle.Windsor,Unity ......等。

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

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

1 个答案:

答案 0 :(得分:3)

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

  1. 在您的应用程序中只有一个“获取” - 在组合根
  2. 使用约定配置容器,而不是逐个使用服务注册。这使配置变小。
  3. 在应用程序的初始组合之后的任何地方使用工厂接口创建实例,并将其作为容器配置的一部分实现(某个容器会自动为您执行此实现)。
  4. 使用这些简单的规则,您的容器只在一个地方知道 - 组合根 - 这使得容器的任何抽象都过时了。这样你可以使用容器的全部功能。