Dependency injection 统一和注册基本类型
就在那时,我遇到了一个使用Unity的情况,我不知道如何解决/接近…这是我的问题 我正在开发一个WPF应用程序,我正在使用MVVM(Prism Implimentation,因此是Unity容器)。我有一个名为Dependency injection 统一和注册基本类型,dependency-injection,unity-container,ioc-container,primitive-types,Dependency Injection,Unity Container,Ioc Container,Primitive Types,就在那时,我遇到了一个使用Unity的情况,我不知道如何解决/接近…这是我的问题 我正在开发一个WPF应用程序,我正在使用MVVM(Prism Implimentation,因此是Unity容器)。我有一个名为MenuItemsViewModel(复数)的视图模型,其中包含MenuItemViewModel(单数)的IEnumerable。在MenuItemsViewModel的构造函数中,我从一个生成器函数填充此集合,如下所示 yield return new MenuItemView
MenuItemsViewModel
(复数)的视图模型,其中包含MenuItemViewModel
(单数)的IEnumerable
。在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....
我真的不想这样做,而是依靠容器来为我构建这些对象,但以上帝的名义,我该怎么做呢?我真的不想让Items ViewModel了解Item ViewModel所实现的接口之外的其他任何信息,但我有大约15个这样的菜单项,每个菜单项都有不同的属性值
我对DI/IoC并不完全陌生,但这对我来说是个大问题。我看到了我的服务并从中受益,但你如何看待具体的价值观
我在这里的想法完全是错误的吗?我应该从容器中解析具体实例,然后设置属性吗?这将是一个选择,但我希望我的道具是只读的,如果可能的话
我希望这足够清楚,…如果不清楚,就对我大喊大叫:-)
非常感谢您的帮助。我将使用解析数组插入菜单项:
container
.RegisterInstance("DASHBOARD", new MenuItemViewModel(...))
.RegisterInstance("AREAS", new MenuItemViewModel(...))
.RegisterType<MenuItemsViewModel>(
new InjectionConstructor(new ResolvedArrayParameter<MenuItemViewModel>()))
容器
.RegisterInstance(“仪表板”,新菜单项视图模型(…)
.RegisterInstance(“区域”,新菜单项视图模型(…)
.RegisterType(
新的注入构造函数(新的ResolvedArrayParameter())
我将使用解析数组插入菜单项:
container
.RegisterInstance("DASHBOARD", new MenuItemViewModel(...))
.RegisterInstance("AREAS", new MenuItemViewModel(...))
.RegisterType<MenuItemsViewModel>(
new InjectionConstructor(new ResolvedArrayParameter<MenuItemViewModel>()))
容器
.RegisterInstance(“仪表板”,新菜单项视图模型(…)
.RegisterInstance(“区域”,新菜单项视图模型(…)
.RegisterType(
新的注入构造函数(新的ResolvedArrayParameter())
实际上,如果MenuItemsViewModel有一个构造函数,它接受MenuItemViewModel[](必须是一个数组),那么默认的依赖项解析应该生效,并将自动为您注入MenuItemViewModel的所有命名实例。Genius,…Genius!非常感谢:-)事实上,如果MenuItemsViewModel有一个构造函数,它接受MenuItemViewModel[](必须是一个数组),那么默认依赖项解析应该生效,并将自动为您注入MenuItemViewModel的所有命名实例。Genius,…Genius!非常感谢:-)