我在Windows Azure应用程序中使用MEF,其中所有程序集插件都存储在blob存储中。在blob存储中不仅存储插件,还存储插件引用的所有程序集。
加载插件的代码如下:
foreach (var pluginBytes in _pluginProvider.GetPlugins())
{
var pluginAssembly = AppDomain.CurrentDomain.Load(pluginBytes);
var assemblyCatalog = new AssemblyCatalog(pluginAssembly);
catalog.Catalogs.Add(assemblyCatalog);
}
不幸的是,当在CompositionContainer上调用ComposeParts方法时,引用第三个部件程序集的插件将导致ReflectionTypeLoadException。
由于云解决方案,我无法使用DirectoryCatalog。 我怎样才能解决这个棘手的问题?
答案 0 :(得分:1)
如果你在另一个blob中有第三方程序集,那么你可以订阅你的应用程序的域AssemblyResolve事件,并使用arg.Name
值从blob中找到第三方程序集。然后以加载插件的方式加载它并返回加载的组件的引用。