Я пытался вставить модули из моего 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 моей оболочки:
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 разрешается Контейнером в Bootstrapper, я получаю следующее исключение:
Ошибка разрешения зависимости, 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, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null]] модули). (Тип стратегии BuildPlanStrategy, индекс 3)
Во всяком случае, просто, да ... Выглядит сбитым с толку ...
Любая помощь будет принята с благодарностью!
Роб