测试如果一个类型已在Unity被注册
-
20-08-2019 - |
题
我可以测试一个类型已在统一容器被登记,而无需调用用于解析和捕获的异常?
解决方案
2.0统一将具有可用于找出是否一个类型已在容器中被注册的IsRegistered
方法。
2.0统一的Beta1的是可用在Codeplex如2月10日的。参阅发行说明,并在这里下载; http://unity.codeplex.com/wikipage?title=Unity2%20Beta1
更新:
下载和上2010年2月27日测试统一2.0测试1,并且它是迄今为止生产准备好。如果你现在使用Unity 1.2,你将不得不做一些主要工作得到统一2.0工作,因为不完整的(?)IUnityContainer接口。所以,如果你想拥有IsRegistered方法今天的工作,你可以扩展方法是这样的:
public static class UnityContainerExtensions
{
public static bool IsRegistered<T>(this IUnityContainer container)
{
try
{
container.Resolve<T>();
return true;
}
catch
{
return false;
}
}
}
这是我使用的不是ResolveAll
这里注意。这样做的原因是,ResolveAll
不会返回默认为在Unity文档表示(未命名的)注册:
如果您已经注册了多个类型与同类型但不同的名字此方法非常有用。
注意,此方法不适用于默认(未命名)登记返回实例。
其他提示
您唯一的其他选择(目前)是使用ResolveAll<T>()
和枚举结果。
不隶属于 StackOverflow