Autofac无法解析注册类型

时间:2012-02-06 19:37:03

标签: c# .net inversion-of-control autofac

我正在注册here所示的组件/服务,我也正在实现一个类,如下所示。当我打电话给Reload时,它说它没有注册,我知道它是。有什么想法吗?

public interface ITypeReloader 
{ 
    PluginBase Reload(Type type); 
} 

public class TypeReloader 
{ 
    IComponentContext _container; 
    public TypeReloader(IComponentContext container) 
    { 
        _container = container; 
    } 

    public PluginBase Reload(Type type) 
    { 
        (PluginBase)_container.Resolve(type);  //Not registered error
    } 
}

1 个答案:

答案 0 :(得分:1)

您链接的答案使用AppDomain.CurrentDomain.GetAssemblies()来获取当前加载的程序集,然后在其中注册从PluginBase派生的任何类型。

但是,程序集仅在首次需要时才加载到AppDomain中。我打赌您感兴趣的类型驻留在程序集中,当您进行注册时尚未加载。您可以通过查看AppDomain.CurrentDomain.GetAssemblies()的结果来检查:是否缺少任何程序集你期待在那里吗?

解决此问题的最简单方法是使用AutoFac MEF integration和MEF的DirectoryCatalog。 DirectoryCatalog完全针对此场景而设计。

编辑:第二眼看,问题是您注册为PluginBase,但后来尝试解析为某个子类型。对于您在此处尝试实现的目标,您可能需要注册.AsSelf()而不是.As<PluginBase>()