У меня есть проект WPF, который ожидает импорт из других сборок.Импорт из другой сборки вызывает исключение при использовании MEF
namespace DrawMe.Core.ViewModels
{
public class MenuBarViewModel : Conductor<IMenuBarItem>
{
[Import(typeof(IMenuBarItem))]
public IMenuBarItem Item { get; set; }
public MenuBarViewModel()
{
MefInjector.Inject(this);
}
}
}
namespace DrawMe.MenuBarItems.ViewModels
{
[Export(typeof(IMenuBarItem))]
public class FileViewModel : Screen, IMenuBarItem
{
public string Name { get; set; }
public List<IMenuBarOption> Options { get; set; }
}
}
Когда я экспортировать FileViewModel
класс я получаю сообщение об ошибке:
The export 'DrawMe.MenuBarItems.ViewModels.FileViewModel (ContractName="DrawMe.Api.Models.MenuBar.IMenuBarItem")' is not assignable to type 'DrawMe.Api.Models.MenuBar.IMenuBarItem'.
Я не понимаю, как это возможно. Большая часть информации, которую я нашел, касается несовместимых версий сборки, но у меня есть очень базовое решение, и каждый проект имеет ту же версию.
Я пробовал использовать Lazy<IMenuBarItem> Item
, но что импорт null
.
Также я использую MefInjector
, поэтому я могу делать импорт из классов, отличных от MainViewModel
.
public static readonly string ExtensionFolderPath = Path.GetFullPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\Extensions");
private static readonly DirectoryCatalog DirectoryCatalog = new DirectoryCatalog(ExtensionFolderPath);
private static readonly CompositionContainer Container = new CompositionContainer(DirectoryCatalog);
public static void Inject<T>(T obj) where T : class
{
Container.ComposeParts(obj);
}
И Bootstrapper
protected override IEnumerable<Assembly> SelectAssemblies()
{
var assemblies = Directory.GetFiles(MefInjector.ExtensionFolderPath, "*.dll", SearchOption.AllDirectories).Select(Assembly.LoadFrom).ToList();
assemblies.Add(Assembly.GetExecutingAssembly());
return assemblies;
}
Любые предложения, что еще я могу попробовать это исправить?
Да, у меня есть и загрузка сборок работает правильно. У меня есть каждая сборка в моем окне модуля, когда я его отлаживаю. – FCin