2017-03-24 65 views
1

它可能是重复的,但没有任何somution已经为我工作;所以我再次发布这个问题。Ninject,MVC5和web api 2,无法找到无参数的公共构造函数

我有一个使用MVC5和WebApi2的Web项目。我已经把构造函数DI与Ninject放在这些控制器上,但是当我尝试访问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,而且我也遇到了同样的问题。

我还能试试吗?

+0

'MyDependency'本身有任何依赖关系吗?如果是这样,那么他们也必须注册。 – Nkosi

+0

Holy sh * t,@Nkosi,你是对的! 'MyDependency'本身有4个依赖关系,ONE没有注册。我肯定已经检查了所有这些......如果Ninject提供了一些关于被遗忘的绑定的信息,那将是非常棒的...... 无论如何,请将您的评论发布为答案,我会接受它。 – gobes

回答

1

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

相关问题