我是否可以在不调用 Resolve 并捕获异常的情况下测试类型是否已在 Unity 容器中注册?
5262 次
2 回答
13
Unity 2.0 将提供一个IsRegistered方法,您可以使用该方法来确定某个类型是否已在容器中注册。
Unity 2.0 的 Beta1 于 2 月 10 日在 Codeplex 上可用。查看发行说明并在此处下载;http://unity.codeplex.com/wikipage?title=Unity2%20Beta1
更新:
于 2010 年 2 月 27 日下载并测试了 Unity 2.0 beta 1,到目前为止它已经准备好生产了。如果您今天使用 Unity 1.2,您将不得不做一些主要工作才能让 Unity 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 文档中所述的默认(未命名)注册:
如果您注册了多个具有相同类型但名称不同的类型,则此方法很有用。
请注意,此方法不会返回默认(未命名)注册的实例。
于 2010-02-27T14:44:48.593 回答
2
您唯一的其他选择(当前)是使用ResolveAll<T>()和枚举结果。
于 2009-01-25T02:04:32.750 回答