我已经在我的 ASP.NET 应用程序中配置了 Unity,当在 Application_BeginRequest 中收到第一个请求时会加载配置。然后 Unity 容器作为属性存储在 Global.ascx 中,以便我的其他类可以访问它:
public static IUnityContainer ContainerHolder { get; set; }
IUnityContainer IContainerAccessor.Container
{
get { return ContainerHolder; }
}
ContainerHolder,跨应用程序保存容器实例,Container 属性允许在每个 session 中访问此属性。
然后我有一个 UnityLocator 类,它使我能够跨应用程序访问此属性:
public static class UnityLocator
{
private static IUnityContainer Container
{
get
{
return ((IContainerAccessor)HttpContext.Current.ApplicationInstance).Container;
}
}
}
一切正常!
我还有一个从 Unity 访问实例的方法:
UnityLocator.GetInstance<IThemeManager>();
protected Repository(ICustomCacheManager customCacheManager)
{
this.Cache = customCacheManager;
}
protected Repository()
: this(UnityLocator.GetInstance<ICustomCacheManager>())
{
}
这已在我的应用程序中使用,以便我可以从 Unity 检索现有实例,以便我可以将其注入(inject)其他类。例如,我的 View (asp.net 页面)将其作为依赖项注入(inject)到它的 Presenter 类中。
现在,我想配置要运行的单元测试。
我怎么能这样?! global.ascx 显然不存在,所以我想我应该创建一个 BaseTest 类并让我所有的测试继承它。然后在这个 BaseTest 类的构造函数中,我构建了我的实例。这是正确的做法吗?
现在如何使用 Unity 配置单元测试?
谢谢
更新: 添加了 UnityLocator.GetInstance。
最佳答案
您不必担心访问您的 IoC 容器。这违反了单元测试。
单元测试你不应该担心任何具体的实现或依赖(被测类除外)。
对我来说,让 IoC 全局可用是一个糟糕的设计选择。您应该通过属性或构造函数注入(inject)依赖项。
关于c# - 如何在 ASP.NET 中使用 IoC 容器配置单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7597375/