您好我正在使用带有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实现这个目标吗?
答案 0 :(得分:4)
它适用于控制器而不是视图模型的原因是因为当您安装NInject NuGet时,它会注册自定义依赖项解析程序,而ASP.NET MVC框架使用控制器工厂或依赖项解析程序来实例化控制器。您可以在this article中阅读有关依赖项解析器的更多信息。
另一方面,查看模型是专门为满足给定视图要求而设计的类。由于您手动实例化它们,因此DI框架永远不会拦截并向其中注入任何依赖项。他们不应该有依赖。它们应该是从域模型映射的简单POCO对象。它们代表了一个或多个领域模型的项目。