gpt4 book ai didi

asp.net-mvc - DI ninject 适用于 Controller 但不适用于 View 模型

转载 作者:行者123 更新时间:2023-12-04 20:19:32 26 4
gpt4 key购买 nike

嗨,我正在将 ninject 与 MVC 应用程序一起使用。

我确信我已经正确设置了它,因为我能够让它为我的 Controller 工作。这是 Controller 的示例,它工作正常:

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;
}

然后我通过以下方式在 Controller 中实例化 View 模型:
public ActionResult Index()
{
return View("Index", Activator.CreateInstance<SettingViewModel>());
}

但这给了我错误:

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

我是 DI 的新手。有人可以告诉我如何为 View 模型实现这一点吗?

最佳答案

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

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

关于asp.net-mvc - DI ninject 适用于 Controller 但不适用于 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8176654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com