C# 除非在代码中放置断点,否则MEF导入ins为null
我在一个项目上使用MEF,但在运行应用程序时,它遇到了解决导入问题的噩梦 它声明对象为null并抛出异常错误 如果我在本地调试应用程序并放置断点,它将解析。似乎在打开应用程序时无法解决此问题 下面是我的MEF解析器类,它是从global.asax初始化的C# 除非在代码中放置断点,否则MEF导入ins为null,c#,mef,C#,Mef,我在一个项目上使用MEF,但在运行应用程序时,它遇到了解决导入问题的噩梦 它声明对象为null并抛出异常错误 如果我在本地调试应用程序并放置断点,它将解析。似乎在打开应用程序时无法解决此问题 下面是我的MEF解析器类,它是从global.asax初始化的 public class MEFDependencyResolver : IDependencyResolver { public MEFDependencyResolver() { container = ne
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;
}
不确定这是由于MEF的稳定性问题还是我做错了什么。在断点上暂停执行时,即使您不检查任何值,它也能工作吗?我曾经遇到过类似的情况,因为我在代码暂停时检查了一个对象,调试器导致加载一个延迟加载的值,所以在我调试时一切都正常。这就是你所说的Heisenbug..请看一看,因为泛型方法可能是延迟加载的。有时它在检查值的同时进行调试并命中断点,有时则不起作用。我已将解决方案改为MVC而不是webapi,现在它工作正常。
[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
};
}
}