В настоящее время я использую MEF для проекта по импорту плагинов, так как плагины написаны на WPF, каждый из которых имеет представление и модель представления.Плагины знают о модели представления, но основной пользовательский интерфейс оболочки создаст представление и свяжет модель представления, используя соглашение по шаблону типа конфигурации.
Я использовал некоторый код из примера Build-your-own-MVVM-frameworkчтобы сделать автоматическое обнаружение вида:
[ImportMany(typeof(IPlugin))]
public IEnumerable<IPlugin> Plugins { get; set; }
var viewTypeName = this.Plugins.First().ViewModel.GetType().AssemblyQualifiedName.Replace("Model", string.Empty);
var viewType = Type.GetType(viewTypeName,true);
Код на данный момент просто получает первый плагин и извлекает Model
из имени, возвращает имя представления и получает тип представления, чтобы я мог построитьЭто.Итак, пример того, что будет viewType:
PluginTest.TestView, PluginTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Однако, когда я вызываю Type.GetType(viewType)
, я получаю ноль, если я добавляю true
, чтобы вызвать исключение, я получаю исключение:
Could not load file or assembly 'PluginTest, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null' or one of its dependencies.
The system cannot find the file specified.
Даже если он уже загружен с использованием MEF.
Если я сделаю:
var types = Assembly.GetAssembly(this.Plugins.First().ViewModel.GetType()).GetTypes();
Я вернусь к списку всех типов в сборке плагина,до сих пор есть только PluginTest.TestView
и PluginTest.TestViewModel
Кто-нибудь может мне помочь с этим?
РЕДАКТИРОВАТЬ: Извините, не упомянул ранее, плагины находятся в разных сборкахк моему основному приложению оболочки.