Я хочу привязать коллекцию (импортированную по соглашению MEF2) IEnumerable<Lazy<IModule>>
к меню.
IModule - это интерфейс для ViewModels, расположенных во внешнем проекте.
Моя проблема в том,с Lazy<T>
я не могу понять, как я могу получить MenuName (и к какому MenuParent он принадлежит, если таковой имеется) без создания экземпляра объекта, и это противоречит цели Lazy Initialization (существует множество модулей и каждый пользователь нуждаетсяиспользовать очень небольшое количество).Я использую Caliburn.Micro для MVVM.
Я думал о сохранении структуры меню в базе данных, но это добавленные точки отказа, когда другие разработчики создают новые модули или удаляют устаревшие модули, и похоже на жесткое кодированиеmenu.
MEF Export:
RegistrationBuilder builder = new RegistrationBuilder()
builder.ForTypesDerivedFrom<IModule>.Export<IModule>
MenuViewModel:
private IEnumerable<Lazy<IModule>> _modules;
public MenuViewModel(IEnumerable<Lazy<IModule>> modules)
{
_modules = modules;
}
public IEnumerable<Lazy<IModule>> Modules
{
get { return _modules; }
set { _modules = value; }
}
Я остановился здесь, потому что не к чему привязываться.Lazy<IModule>
не содержит никакой информации о типе, связанном с ним.
Я ищу стратегию, позволяющую экспортировать MEF сторонних плагинов, названия которых я могу отображать в меню, безжесткое кодирование меню.