如何使用构造函数参数进行依赖注入?

时间:2016-03-16 18:39:33

标签: asp.net-mvc dependency-injection ninject

当我还想将参数传递给类的构造函数时,使用依赖注入的正确方法是什么?

例如,在这里我想要注入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™。

我确定问题是我没有正确构建代码。有什么想法吗?

0 个答案:

没有答案