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

标签 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();  

谢谢!!

最佳答案

是的,这是可能的。

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

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

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

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

Registering Types and Type Mappings 的文档

关于unity-container - Microsoft Unity - 是否可以在运行时更改注册类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10326799/

相关文章:

c# - 在 MVC 4 应用程序中使用 Unity 和 Entity Framework 的最佳实践是什么

c# - 我可以像在 Autofac 中那样在 Unity 中的模块中注册我的类型吗?

c# - 如何通过 Unity 容器配置 HttpClient?

c# - 如何使用 Ioc Unity 注入(inject)依赖属性

caSTLe-windsor - 使用不是为 IOC 设计的遗留应用程序避免服务定位器反模式

c# - 统一.NET : List of dependencies

c# - 我应该将 Unity 容器传递给我的依赖项吗?

c# - 为什么 Unity 调用是链接的?

c# - 如何使用 Unity 容器解决 Web API 中依赖项的依赖关系?

c# - 如何使用带有两个构造函数的viewmodel的Unity框架显示子窗口?