Я пытался внедрить модули из моего ModuleCatalog в ViewModel моей оболочки, но мне не очень повезло ...
Я создаю ModuleCatalog в моем загрузчике, и мой модуль без проблем попадает на экран из своего инициализатора. Тем не менее, я бы хотел иметь возможность связать мой список модулей с контейнером с помощью DataTemplate, который позволял запускать их из меню!
Вот мой файл Boostrapper, со временем я буду добавлять больше модулей, но сейчас он просто содержит мой довольно надуманный «ProductAModule»:
public class Bootstrapper : UnityBootstrapper
{
protected override void ConfigureContainer()
{
Container.RegisterType<IProductModule>();
base.ConfigureContainer();
}
protected override IModuleCatalog GetModuleCatalog()
{
return new ModuleCatalog()
.AddModule(typeof(ProductAModule));
}
protected override DependencyObject CreateShell()
{
var view = Container.Resolve<ShellView>();
var viewModel = Container.Resolve<ShellViewModel>();
view.DataContext = viewModel;
view.Show();
return view;
}
}
Исходя из этого, вот ViewModel моей Shell:
public class ShellViewModel : ViewModelBase
{
public List<IProductModule> Modules { get; set; }
public ShellViewModel(List<IProductModule> modules)
{
modules.Sort((a, b) => a.Name.CompareTo(b));
Modules = modules;
}
}
Как вы можете видеть, я пытаюсь внедрить список IProductModule (которому ProductAModule наследует некоторые из его свойств и методов), чтобы затем его можно было привязать к представлению моей оболочки. Есть ли что-то ДЕЙСТВИТЕЛЬНО простое, что я пропускаю, или это нельзя сделать с помощью Unity IoC? (Я видел, что это сделано с расширением StructureMap для Prism)
Еще одна вещь ... При запуске приложения, в тот момент, когда ShellViewModel разрешается контейнером в загрузчике, я получаю следующее исключение:
Не удалось разрешить зависимость, type = "PrismBasic.Shell.ViewModels.ShellViewModel", name = "". Сообщение об исключении: Текущая операция сборки (ключ сборки Build Key [PrismBasic.Shell.ViewModels.ShellViewModel, null]) завершилась неудачно: не удалось разрешить модули параметров при попытке вызвать конструктор PrismBasic.Shell.ViewModels.ShellViewModel (System.Collections .Generic.List`1 [[PrismBasic.ModuleBase.IProductModule, PrismBasic.ModuleBase, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null]] модули). (Тип стратегии BuildPlanStrategy, индекс 3)
Во всяком случае, просто да ... Выглядит ошеломленным ...
Любая помощь будет принята с благодарностью!
Rob