如何让ViewModels注入DI?

时间:2018-02-02 14:09:27

标签: c# asp.net-mvc asp.net-mvc-4 unity-container

我在我的mvc projetc中使用Unity注入。 现在我想在我用来创建UI的ViewModel上应用DI。

当我想实例化一个视图模型时,我将传递视图模型构造函数的Dependencies trough参数。是不是?

控制器示例:

private readonly IPersonnelAMBusiness _IPersonnelAMBusinessRepo;
        private readonly IAnomalyBusiness _IAnomalyBusinessRepo;
        private readonly IDocumentBusiness _IDocumentBusinessRepo;
        private readonly IMessageBusiness _IMessageBusinessRepo;
        private readonly ICockpitStatBusiness _ICockpitStatBusinessRepo;
        private readonly INatureBusiness _INatureBusinessRepo;
        private readonly IAuditBusiness _IAuditBusinessRepo;
        private readonly IInstallationBusiness _IInstallationBusinessRepo;
        private readonly IUnitBusiness _IUnitBusinessRepo;

        // Unity inject references
        public HomeController(IPersonnelAMBusiness personnelRepo, IAnomalyBusiness anomalyRepo, IDocumentBusiness docRepo, 
            IMessageBusiness msgRepo, ICockpitStatBusiness cockpitStatRepo, INatureBusiness natureRepo,
            IAuditBusiness auditRepo,IInstallationBusiness installRepo, IUnitBusiness unitRepo)
        {
            _IPersonnelAMBusinessRepo = personnelRepo;
            _IAnomalyBusinessRepo = anomalyRepo;
            _IDocumentBusinessRepo = docRepo;
            _IMessageBusinessRepo = msgRepo;
            _ICockpitStatBusinessRepo = cockpitStatRepo;
            _INatureBusinessRepo = natureRepo;
            _IAuditBusinessRepo = auditRepo;
            _IInstallationBusinessRepo = installRepo;
            _IUnitBusinessRepo = unitRepo;
        }

public ActionResult TopMenu()
        {
            TopMenuViewModel model = new TopMenuViewModel(_IPersonnelAMBusinessRepo, _IDocumentBusinessRepo, _IMessageBusinessRepo);
            model.SetMenuFor(SessionManager.matricule);
            return PartialView("~/Views/Shared/_TopMenu.cshtml", model);
        }

基本上我有一个BaseViewModel来托管常见的UI列表等。这个基本的viewmodel被很多视图模型使用(不是之前我把它作为例子的ViewModel)。

因为ViewModel使用了我的所有依赖项(+10),所以我是否必须从控制器注入所有依赖项,即使控制器只使用其中的一个?或者在Unity Config中有一种方法可以说ViewModels可以用Unity做DI?

在Unity中,我设置了依赖性:

 container.RegisterType<IEmailBusiness, EmailBusiness>();
 ...
 DependencyResolver.SetResolver(new UnityDependencyResolver(container));

谢谢

0 个答案:

没有答案