Unity - loadConfiguration,如何只解析那些配置的

时间:2013-08-22 00:30:38

标签: c# dependency-injection unity-container

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

App.Config中

<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中定义,有时它不会在那里。当我尝试解析一个接口/类并且它不存在时,我得到一个例外。

有人可以在这教育我吗?

谢谢, 安德鲁

1 个答案:

答案 0 :(得分: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>();

另请查看此链接:Is there TryResolve in Unity?