MEF导入ins null,除非在代码中放置断点

时间:2014-02-27 11:24:46

标签: c# mef

我在一个项目上使用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的稳定性问题还是我做错了。

0 个答案:

没有答案