0

我想要实现的目标:让 Unity 从配置文件加载映射,然后在源代码中解析从所述配置文件加载的类型

应用程序配置

<register type="NameSpace.ITill, ExampleTightCoupled" mapTo="NameSpace.Till, NameSpace" />
<register type="NameSpace.IAnalyticLogs, NameSpace" mapTo="NameSpace.AnalyticLogs, NameSpace" />

代码

IUnityContainer container;
container = new UnityContainer();

// Read interface->type mappings from app.config
container.LoadConfiguration();

// Resolve ILogger - this works
ILogger obj = container.Resolve<ILogger>();

// Resolve IBus - this fails
IBus = container.Resolve<IBus>();

问题:有时 IBus 将在 App.config 中定义,有时它不存在。当我尝试解析一个接口/类并且它不存在时,我得到一个异常。

有人可以在这里教育我吗?

谢谢,安德鲁

4

1 回答 1

2

您使用的是哪个版本的 Unity?在 v2+ 中有一个扩展方法:

public static bool IsRegistered<T>(this IUnityContainer container);

所以你可以做

if (container.IsRegistered<IBus>())
    IBus = container.Resolve<IBus>();

扩展方法会使这更好

public static class UnityExtensions
{
    public static T TryResolve<T>(this IUnityContainer container)
    {
        if (container.IsRegistered<T>())
            return container.Resolve<T>();

        return default(T);
    }
}

// TryResolve returns the default type (null in this case) if the type is not configured
IBus = container.TryResolve<IBus>();

另请查看此链接:Unity 中有 TryResolve 吗?

于 2013-08-22T05:44:37.503 回答