DI ninject为控制器工作但不是视图模型

时间:2011-11-18 01:18:19

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

您好我正在使用带有MVC应用程序的ninject。

我确定我已正确设置,因为我能够让它适用于我的控制器。以下是控制器的示例,它正常工作:

public class GstRateController : Controller
    {
        private readonly IUnitOfWork _unitOfWork;

        public GstRateController(IUnitOfWork unitOfWork)
        {
            _unitOfWork = unitOfWork;
        }
...

然后我认为它在viewModel上也会很好,所以我尝试了:

public class SettingController : Controller
    {
        private readonly IUnitOfWork _unitOfWork;

        public SettingController(IUnitOfWork unitOfWork)
        {
            _unitOfWork = unitOfWork;
        }

然后我通过以下方式在控制器中实例化视图模型:

public ActionResult Index()
        {
            return View("Index", Activator.CreateInstance<SettingViewModel>());
        }

但是这给了我错误:

没有为此对象定义无参数构造函数。

我是DI的新手。有人可以告诉我如何为viewmodels实现这个目标吗?

1 个答案:

答案 0 :(得分:4)

它适用于控制器而不是视图模型的原因是因为当您安装NInject NuGet时,它会注册自定义依赖项解析程序,而ASP.NET MVC框架使用控制器工厂或依赖项解析程序来实例化控制器。您可以在this article中阅读有关依赖项解析器的更多信息。

另一方面,查看模型是专门为满足给定视图要求而设计的类。由于您手动实例化它们,因此DI框架永远不会拦截并向其中注入任何依赖项。他们不应该有依赖。它们应该是从域模型映射的简单POCO对象。它们代表了一个或多个领域模型的项目。