Unity IoC并注册基本类型

时间:2010-09-16 10:49:09

标签: dependency-injection unity-container ioc-container primitive-types

就在那时,我遇到了一个使用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的新手,但这对我来说是个大问题。我看到并从注入我的服务中获益,但你对具体的价值观做了什么?

我觉得这里完全错误吗?我应该只是从容器中解析具体实例,然后然后设置属性?这将是一个选择,但如果可能的话,我喜欢我的道具只读。

我希望这很清楚,如果没有,请对我大喊: - )

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我会使用已解析的数组来注入菜单项:

container
  .RegisterInstance("DASHBOARD", new MenuItemViewModel(...))
  .RegisterInstance("AREAS", new MenuItemViewModel(...))

  .RegisterType<MenuItemsViewModel>(
     new InjectionConstructor(new ResolvedArrayParameter<MenuItemViewModel>()))