我在我的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));
谢谢