2012-02-06 78 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