Ninject、MVC5 和 web api 2、找不到无参 public 构造函数
Ninject, MVC5 and web api 2, can't find parameterless public constructor
它可能是重复的,但没有任何解决方案对我有用;所以我 post 再问一次这个问题。
我有一个同时使用 MVC5 和 WebApi2 的 Web 项目。我已经在这些控制器上放置了带有 Ninject 的构造函数 DI,但是当我尝试访问网络 api 控制器时,我遇到了这个异常:
Make sure that the controller has a parameterless public constructor.
我的 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,但我遇到了同样的问题。
我还能尝试什么?
如果 MyDependency
本身有任何依赖项,那么这些依赖项也必须向内核注册,否则在构造函数注入期间尝试解析 MyDependency
时会导致异常控制器。
它可能是重复的,但没有任何解决方案对我有用;所以我 post 再问一次这个问题。
我有一个同时使用 MVC5 和 WebApi2 的 Web 项目。我已经在这些控制器上放置了带有 Ninject 的构造函数 DI,但是当我尝试访问网络 api 控制器时,我遇到了这个异常:
Make sure that the controller has a parameterless public constructor.
我的 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,但我遇到了同样的问题。
我还能尝试什么?
如果 MyDependency
本身有任何依赖项,那么这些依赖项也必须向内核注册,否则在构造函数注入期间尝试解析 MyDependency
时会导致异常控制器。