我在一个项目上使用MEF,但在运行应用程序时解决导入问题却是一场噩梦。
它声明该对象为null并引发异常错误。
如果我在本地调试应用程序并放置断点,它就会解析。看起来它在打开应用程序时没有解决。
以下是我的MEF Resolver类,它从global.asax
开始public class MEFDependencyResolver : IDependencyResolver
{
public MEFDependencyResolver()
{
container = new CompositionContainer
(
new AggregateCatalog
(
AppDomain.CurrentDomain
.GetAssemblies()
.Where(a => a.FullName.StartsWith("T20Cricket2014"))
.Select(a => new AssemblyCatalog(a))
)
);
}
public object GetService(Type serviceType)
{
return GetType().GetMethods().First(m => m.IsGenericMethod && m.Name == "GetService").MakeGenericMethod(serviceType).Invoke(this, null);
}
public T GetService<T>()
{
try
{
var export = container.GetExport<T>();
return export == null ? default(T) : export.Value;
}
catch(Exception)
{
return default(T);
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
return new object[0];
}
readonly CompositionContainer container;
}
这是我的一个类在加载应用程序时失败:
[Export]
public class DefaultBuilder
{
[Import]
public IUserData Users;
public Default Build(string ID)
{
var user = Users.Get(ID);
var isNull = user == null;
return new Default
{
Registered = user != null,
User = isNull ? null : user.Name
};
}
}
不确定这是由于MEF的稳定性问题还是我做错了。