我在Bootstrapper中创建了ModuleCatalog,并且我的模块可以从它的Initializer上得到屏幕展示,没有问题。然而,我希望能够将我的模块列表绑定到一个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;
}
}
以下是我的Shell的ViewModel:
接下来,这是我的Shell的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 继承了一些属性和方法),以便它可以绑定到我的 Shell 视图。我错过了什么非常简单的东西吗?或者不能使用 Unity IoC 进行操作?(我看到了 StructureMap 的 Prism 扩展可以实现这一点)
还有一件事...当应用程序运行时,在 Bootstrapper 中容器解析 ShellViewModel 时,我收到以下异常:
“PrismBasic.Shell.ViewModels.ShellViewModel”,名称为“”。异常消息是:当前构建操作(构建密钥 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=neutral, PublicKeyToken=null]] modules) 时无法解析参数模块。(策略类型 BuildPlanStrategy,索引 3)
总之,很简单...看起来有点困惑...
任何帮助都将不胜感激!
Rob