【问题标题】:Ninject not working in MVC 4Ninject 在 MVC 4 中不起作用
【发布时间】:2013-09-20 09:54:41
【问题描述】:

我有一个简单的 MVC 4 应用程序:

我从 nuget 安装了 Ninject MVC 3,并将服务从 App_Start folder 注册到 NinjectWebCommon.cs

/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<IAppFormAppUnitOfWork>()
          .To<AppFormAppUnitOfWork>()
          .InRequestScope();
}

我有一个HomeController

public class HomeController : Controller
{
    private readonly IAppFormAppUnitOfWork _unitOfWork;
    public HomeController(
        IAppFormAppUnitOfWork unitOfWork)
    {
        _unitOfWork = unitOfWork;
    }
}

我得到了错误

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

我还在RegisterServices(IKernel kernel) 方法中设置了一个断点,它被命中了。

我错过了什么,做错了什么?

【问题讨论】:

  • 这是一个令人讨厌的错误。基本上,这意味着 Ninject 没有正确注册,也没有将自己注册为 MVC 的控制器工厂。
  • 您是用ControllerBuilder.Current.SetControllerFactory 注册您的NinjectControllerFactory 还是用DependencyResolver.SetResolver 注册您的NinjectRependencyResolver
  • @Steven:不,这就是问题所在。之前,在 MVC3 上,默认情况下一切正常。不需要手动注册控制器工厂

标签: c# asp.net-mvc asp.net-mvc-4 ninject


【解决方案1】:

如果您已经使用 Ninject 注册了 DependencyResolver.Current,那么,就只剩下一个问题了。

Ninject 在构建您的 AppFormAppUnitOfWork 以传递给您的时遇到异常 控制器的构造函数。

要找出那个异常是什么,你可以在一些地方写几行代码,比如开始请求,然后尝试从 DependencyResolver.Current 解析你的对象。

把这段代码放到try catch中,然后你就会找到问题的主要根源。

祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2012-07-07
    • 2019-01-15
    • 2014-08-03
    相关资源
    最近更新 更多