2010-07-02 59 views
0

这与This question类似,但答案并不能解决我的问题。统一注册类型映射如果丢失?

我想在代码中注册一个接口的默认实现,但能够在代码运行之前覆盖配置中的接口。

我要像做

if (!container.IsImplementationRegistered(typeof(TInterface)) 
{ 
    container.RegisterType<TInterface, TImplementation>(); 
} 

我不能使用TryResolve我将在可能有自己的那些尚未注册的依赖性一行来登记几种类型,导致错误的覆盖。

Unity 2.0是否启用这个功能,或者有没有办法在1.2中完成它?

回答

0

也许你可以试试儿童容器。

  1. 代码
  2. 创建一个容器创建使用CreateChildContainer()子容器
  3. 配置从配置文件
  4. 使用在应用程序中的子容器的子容器读数。

如果子容器无法解析某个类型,则Unity将转到父容器进行解析。

+0

如果传递给解析和注册的引用是相同的,那将会容易得多。按照现状,我必须将孩子交给需要解决的事情,让父母接受需要注册的事情。由于我有两个模块需要做,他们现在需要两个引用或特殊代码来调用注册表之前获得父级。无论哪种方式,他们需要知道容器的结构。我想避免这种情况,但是直到我们转向Unity 2.0或Windsor之前,我们必须这样做。 – 2010-07-09 09:50:46