我正在注册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
}
}
答案 0 :(得分:1)
您链接的答案使用AppDomain.CurrentDomain.GetAssemblies()
来获取当前加载的程序集,然后在其中注册从PluginBase
派生的任何类型。
但是,程序集仅在首次需要时才加载到AppDomain中。我打赌您感兴趣的类型驻留在程序集中,当您进行注册时尚未加载。您可以通过查看AppDomain.CurrentDomain.GetAssemblies()
的结果来检查:是否缺少任何程序集你期待在那里吗?
解决此问题的最简单方法是使用AutoFac MEF integration和MEF的DirectoryCatalog。 DirectoryCatalog完全针对此场景而设计。
编辑:第二眼看,问题是您注册为PluginBase
,但后来尝试解析为某个子类型。对于您在此处尝试实现的目标,您可能需要注册.AsSelf()
而不是.As<PluginBase>()
。