2016-09-12 111 views
1

因此,可以说我有一个名为MyClassView的视图,其虚拟机名称为MyClassViewModel,这些组件位于IModule实现中。我可以轻松地将MyClass的一个实例注册到UnityBootstrapper,并指示MyClassViewModel的成员通过注入来检索它。依赖注入与集合

引导程序

this.Container.RegisterInstance<MyClass>("MyClass", new MyClass()); 

视图模型

[Dependency("MyClass")] 
public MyClass MyClass { get; set; } 

简单enouigh。现在,假设我想更进一步,创建一个遵循类似注入策略的视图MyClassCollection,但也允许我将MyClass的每个实例注入到MyClassView中,实质上使用一个模块作为另一个模块的ItemTemplate

我该怎么办?感谢您的建议。

回答

0

Unity将会愉快地将给定接口的所有命名注册注入到该接口的数组中。

internal class MyCollectionViewModel 
{ 
    public MyCollectionViewModel(IItem[] theItems) 
    { 
     // use theItems to fill your collection of ItemViewModels... 
    } 
} 

的项目必须注册界面,当然:

Container.RegisterType<IItem, MyClass>("model 1"); 
Container.RegisterType<IItem, SomeOtherClass>("model 2"); 

BTW,我更喜欢构造函数注入对财产注射,因为你不得不填写相关性。属性注入用于可选的依赖项。