我目前正在使用 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();
谢谢!!
最佳答案
是的,这是可能的。
您可以根据需要多次配置 Unity。如果存在冲突,则以最新的定义为准。
在您的情况下,如果您想进行运行时更改,请使用 Fluent API 而不是配置文件。尝试这样的事情:
IUnityContainer container = new UnityContainer();
container.LoadConfiguration();
container.RegisterType<IMyInterface, AnotherMockObject>();
// use AnotherMockObject
_proxy = Resolve<IMyInterface>();
关于unity-container - Microsoft Unity - 是否可以在运行时更改注册类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10326799/