我可以测试一个类型已在统一容器被登记,而无需调用用于解析和捕获的异常?

有帮助吗?

解决方案

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>()和枚举结果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top