2012-02-06 111 views
1

我正在注册我的组件/服务,如here所示,我也正在实施如下所示的类。当我打电话给Reload时,它说它没有注册,我知道它是。有任何想法吗?Autofac未解析注册类型

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 
    } 
} 

回答

0

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

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

解决此问题的最简单方法是使用AutoFac MEF integration和MEF的DirectoryCatalog代替。 DirectoryCatalog正是为这种情况设计的。

编辑:在第二次看,问题是,你注册为PluginBase但随后试图解决一些亚型。对于您要在此处实现的目标,您可能需要注册.AsSelf()而不是.As<PluginBase>()

+0

它不会缺少任何。我知道它已经注册了类,他们继承了pluginbase,因为我可以调用resolve pluginbase,它给了我不同的实例 – Jon 2012-02-06 22:09:34

+0

我保持注册相同,但添加了AsSelf,它似乎工作!所以它有作为().AsSelf() – Jon 2012-02-07 09:27:36

+0

不知道这是什么意思! – Jon 2012-02-07 09:34:21