就在那时,我遇到了一个使用Unity的情况,我不知道如何解决/接近......这是我的问题。
我正在开发一个WPF应用程序,我正在使用MVVM(Prism Implimentation因此是Unity容器)。我有一个名为MenuItemsViewModel
(复数)的ViewModel,其中包含IEnumerable
MenuItemViewModel
(单数)。在MenuItemsViewModel
的构造函数中,我从这样的生成器函数中填充此集合......
yield return new MenuItemViewModel(eventAggregator)
{
Text = "Dashboard",
CommandText = "DASHBOARD"
};
yield return new MenuItemViewModel(eventAggregator)
{
Text = "Areas",
CommandText = "AREAS"
};
yield return new MenuItemViewModel(eventAggregator)
{
Text = "Users",
CommandText = "USERS"
}; //etc....
我真的不想这样做,而是依靠容器来为我构建这些物品,但是如何以神的名义去做呢?我真的不希望我的Item ViewModel知道我的Item ViewModel而不是它实现的接口,但是我有大约15个这样的菜单项,每个菜单项都有不同的属性值。
我不是DI / IoC的新手,但这对我来说是个大问题。我看到并从注入我的服务中获益,但你对具体的价值观做了什么?
我觉得这里完全错误吗?我应该只是从容器中解析具体实例,然后然后设置属性?这将是一个选择,但如果可能的话,我喜欢我的道具只读。
我希望这很清楚,如果没有,请对我大喊: - )
非常感谢任何帮助。
答案 0 :(得分:1)
我会使用已解析的数组来注入菜单项:
container
.RegisterInstance("DASHBOARD", new MenuItemViewModel(...))
.RegisterInstance("AREAS", new MenuItemViewModel(...))
.RegisterType<MenuItemsViewModel>(
new InjectionConstructor(new ResolvedArrayParameter<MenuItemViewModel>()))