【发布时间】:2010-01-21 21:20:31
【问题描述】:
我一直在尝试将 ModuleCatalog 中的模块注入到我的 Shell 的 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;
}
}
接下来,这是我的 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 扩展来完成)
还有一件事...运行应用程序时,当 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=neutral, PublicKeyToken=null]] 模块)。 (策略类型 BuildPlanStrategy,索引 3)
总之,简单吧...看起来很困惑...
任何帮助将不胜感激!
罗伯
【问题讨论】: