我想以与shown here类似的方式加载插件,但加载的程序集似乎不共享相同的上下文。通过结构映射加载程序集时的上下文
试图解决问题,我只是建立一个包含两个组件的小尖峰。一个控制台应用程序和一个库。控制台应用程序包含IPlugin接口并且没有对插件dll的引用。
我扫描使用自定义登记公约的插件目录:
ObjectFactory.Initialize(x => x.Scan(s =>
{
s.AssembliesFromPath(@"..\Plugin");
s.With(new PluginScanner());
}));
public void Process(Type type, Registry registry)
{
if (!type.Name.StartsWith("P")) return;
var instance = ObjectFactory.GetInstance(type);
registry.For<IPlugin>().Add((IPlugin)instance);
}
其中thows无效转换异常说“插件类型不能转换成IPlugin”。
而且,如果我只是构造实例(其中的方式正常工作),并尝试访问的ObjectFactory在插件ObjectFactory.WhatDoIHave()显示插件实例和主机实例甚至不共享相同的容器实例。
用MEF,Structuremap实验并手动加载程序集,Assembly.Load(“Plugin”)显示如果用Assembly.Load加载它工作正常。任何想法我可以如何解决这个与StructureMaps程序集扫描工作?