[英]Autofac not resolving registered types
我登記我的組件/服務如圖所示在這里 ,我也實現類,如下圖所示。 當我打電話給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
}
}
鏈接到的答案使用AppDomain.CurrentDomain.GetAssemblies()
獲取當前加載的程序集,然后在其中注冊任何從PluginBase
派生的類型。
但是,程序集僅在首次需要時才加載到AppDomain中。 我敢打賭,您感興趣的類型駐留在進行注冊時尚未加載的程序集中。 您可以通過查看AppDomain.CurrentDomain.GetAssemblies()
的結果進行檢查:它是否缺少您期望的所有程序集?
解決此問題的最簡單方法是使用AutoFac MEF集成和MEF的DirectoryCatalog。 DirectoryCatalog正是針對這種情況而設計的。
編輯 :再PluginBase
,問題是您注冊為PluginBase
,然后嘗試將其解析為某些子類型。 對於您要在此處實現的目標,可能需要注冊.AsSelf()
而不是.As<PluginBase>()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.