1

那么,我遇到了使用Unity的情况,我不知道如何解决/方法......这是我的问题。Unity IoC和注册原始类型

我正在开发一个WPF应用程序,我使用MVVM(Prism Implimentation因此是Unity容器)。我有一个名为MenuItemsViewModel(复数)的ViewModel,其中包含IEnumerableMenuItemViewModel(单数)。在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

我会用决心阵列注入菜单项:

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

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

其实,如果MenuItemsViewModel有一个构造函数一个MenuItemViewModel [](必须是一个数组),那么默认的相关决议应踢,将自动为您注入MenuItemViewModel的所有命名实例。 – 2010-09-16 18:01:30

+0

@Chris你是对的+1 – onof 2010-09-17 11:04:38

+0

天才,......天才!非常感谢 :-) – Stimul8d 2010-09-17 11:32:03