当我还想将参数传递给类的构造函数时,使用依赖注入的正确方法是什么?
例如,在这里我想要注入IApplicationService,但我也想传入一个应用程序ID:
public class ApplicationViewModel
{
private readonly IApplicationService _applicationService;
private readonly int _applicationId;
public ApplicationViewModel(IApplicationService applicationService, int applicationId)
{
_applicationService = applicationService;
_applicationId = applicationId;
}
}
目前,我在控制器上使用构造函数注入并传递它:
public class HomeController : Controller
{
private readonly IApplicationService _applicationService;
public HomeController(IApplicationService applicationService)
{
_applicationService = applicationService;
}
public ActionResult Application(int applicationId)
{
return View(new ApplicationViewModel(_applicationService, applicationId));
}
}
这很有效,但看起来有点难看。控制器可能有很多动作方法,每个方法都需要很多服务。控制器最终会得到一大堆注入的东西,这些东西大部分都不会被使用。此外,我宁愿能够在不更改控制器的情况下更改视图模型需要注入的内容。
我也尝试在视图模型上使用属性注入,但它在MVC5中不起作用,并且属性注入似乎通常被视为Bad Idea™。
我确定问题是我没有正确构建代码。有什么想法吗?