【发布时间】:2017-03-24 13:53:32
【问题描述】:
这可能是重复的,但没有任何解决方案对我有用;所以我再发一次这个问题。
我有一个同时使用 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,我也遇到了同样的问题。
我还能尝试什么?
【问题讨论】:
-
MyDependency本身有依赖关系吗?如果是这样,那么他们也必须注册。 -
天哪,@Nkosi,你是对的!
MyDependency本身有 4 个依赖项,其中一个没有注册。我确定已经检查了所有这些...如果 Ninject 提供一些有关忘记绑定的信息会很棒...无论如何,发表您的评论作为答案,我会接受它。
标签: c# asp.net-mvc asp.net-web-api2 ninject