Я хочу загрузить плагины аналогично , показанному здесь , однако загруженные сборки, похоже, не имеют общего контекста.
Пытаясь решить проблему, я просто строю крошечный шипсодержащий две сборки.Одно консольное приложение и одна библиотека.Консольное приложение содержит интерфейс IPlugin и не имеет ссылок на dll плагина.
Я сканирую dir плагина, используя пользовательское соглашение о регистрации:
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);
}
, которое выдает недопустимое исключение приведения, говоря"не могу преобразовать тип плагина в IPlugin".
public class P1 : IPlugin
{
public void Start() { Console.WriteLine("Hello from P1"); }
}
Далее, если я просто создаю экземпляр (который, кстати, работает нормально) и пытаюсь получить доступ к ObjectFactory в плагине ObjectFactory.WhatDoIHave () показывает, чтоЭкземпляр плагина и экземпляр хоста даже не используют один и тот же экземпляр контейнера.
Экспериментируя с MEF, Structuremap и загрузкой сборки вручную, где Assembly.Load ("Плагин") показывает, загружен ли с Assembly.Load, это работаетхорошо.Любые идеи, как я могу это исправить, чтобы работать со сканированием сборки StructureMaps?