Ninject,MVC5和web api 2,找不到无参数的公共构造函数

时间:2017-03-24 13:53:33

标签: c# asp.net-mvc asp.net-web-api2 ninject

这可能是重复的,但没有任何结果对我有用;所以我再次发布这个问题了。

我有一个使用MVC5和WebApi2的Web项目。我把Ninject的构造函数DI放在那些控制器上,但是当我尝试访问web api控制器时,我有这个例外:

  

确保控制器具有无参数的公共构造函数。

我的NinjectWebCommon.CreateKernel()方法中有这个:

var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

RegisterServices(kernel);

GlobalConfiguration.Configuration.DependencyResolver = new Ninject.Web.WebApi.NinjectDependencyResolver(kernel);
System.Web.Mvc.DependencyResolver.SetResolver(new Ninject.Web.Mvc.NinjectDependencyResolver(kernel));

return kernel;

以下是控制器的相关内容:

private MyDependency dependency;

public MyController(MyDependency injectedDependency)
{
    this.dependency = injectedDependency;
}

相关的约束力:

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<MyDependency>().ToSelf().InSingletonScope();
}

我尝试在this solution之后创建自定义解析器,但我仍然有例外。我也尝试过使用Unity,我遇到了同样的问题。

我还能尝试什么?

1 个答案:

答案 0 :(得分:1)

如果MyDependency本身有任何依赖项,那么这些依赖项也必须在内核中注册,否则在构造函数注入控制器期间尝试解析MyDependency时会导致异常。