我想要实现的目标:让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中定义,有时它不会在那里。当我尝试解析一个接口/类并且它不存在时,我得到一个例外。
有人可以在这教育我吗?
谢谢, 安德鲁
答案 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?