Microsoft Unity - 是否可以在运行时更改注册类型?

时间:2012-04-26 03:24:07

标签: unity-container

我目前正在使用Unity和MOQ对WCF进行单元测试。在应用程序的代码中,我有以下内容:

private void MyMethod()
{
.....
.....
    _proxy = new UnityContainer().LoadConfiguration().Resolve<IMyInterface>();
.....
}

在应用程序的app.config中,我有以下内容:

<container>
  <register type="IMyInterface" mapTo="MyActualObject" />
</container> 

在单元测试的app.config中,我将其替换为代理的模拟对象实现。

<container>
  <register type="IMyInterface" mapTo="MyMockObject" />
</container> 

这一切都很好。但我想进一步做的是某些测试,我想用不同的模拟对象实现替换MyMockObject。

是否可以在运行时更改注册类型?我尝试在运行时修改应用程序配置,但无法检测到更改。

 Configuration appConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 var section = (UnityConfigurationSection)appConfig.GetSection("unity");
 section.Containers[0].Registrations[0].MapToName = "AnotherMockObject";
 appConfig.Save();  

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,可能。

您可以根据需要多次配置Unity。如果存在冲突,则最新的定义会获胜。

在您的情况下,如果要进行运行时更改,请使用fluent API而不是配置文件。尝试这样的事情:

IUnityContainer container = new UnityContainer();
container.LoadConfiguration();
container.RegisterType<IMyInterface, AnotherMockObject>();

// use AnotherMockObject
_proxy = Resolve<IMyInterface>();

Registering Types and Type Mappings

的文档