在将此标记为副本之前,请花时间阅读该问题!
我在VS2015中创建了一个新的web应用项目,增加了MVC 5和Web 2。
我在项目中添加了以下软件包:
Ninject
Ninject.MVC5
Ninject.Web
Ninject.Web.Common
Ninject.Web.Common.WebHost
Ninject.Web.WebApi
Ninject.Web.WebApi.WebHost这在NinjectWeb.cs文件夹中创建了一个App_Start和NinjectWebCommon.cs文件。两者都有断点,我知道它们在启动时就会被击中。
但我还是得到了
没有为该对象定义无参数构造函数。
当击中MVC控制器和
确保控制器具有无参数的公共构造函数。
击中Web控制器时出错。
因此,我有一个“解决”问题的方法,我将这2行代码添加到NinjectWebCommon.cs文件的NinjectWebCommon.cs方法中:
GlobalConfiguration.Configuration.DependencyResolver = new Ninject.Web.WebApi.NinjectDependencyResolver(kernel);
System.Web.Mvc.DependencyResolver.SetResolver(new Ninject.Web.Mvc.NinjectDependencyResolver(kernel));因此,问题是:在Ninject代码中,应该在哪里处理这个问题?我想从GitHub上抓取代码来彻底解决这个问题,但是想知道我应该在哪里寻找一些提示吗?
编辑:RegisterServices方法的内容:
private static void RegisterServices(IKernel kernel) {
// Identity
kernel.Bind<IUserStore<ApplicationUser>>()
.To<UserStore<ApplicationUser>>()
.WithConstructorArgument("connectionNameOrUrl", "User.MongoDB");
kernel.Bind<UserManager<ApplicationUser>>()
.ToSelf()
.InRequestScope()
.WithConstructorArgument("store", ctx => ctx.Kernel.Get<IUserStore<ApplicationUser>>());
// Services
// Other
kernel
.Bind<IAzureSettings>()
.To<UserAzureSettings>()
.InRequestScope();
// Providers
kernel
.Bind<WebApiUserProvider>()
.ToSelf();
kernel
.Bind<MVCUserProvider>()
.ToSelf();
kernel
.Bind<IUserProvider>()
.ToMethod((ctx) => {
if (HttpContext.Current.Handler.GetType().Namespace.StartsWith("System.Web.Mvc")) {
return ctx.Kernel.Get<MVCUserProvider>(new Ninject.Parameters.IParameter[] { });
}
else {
return ctx.Kernel.Get<WebApiUserProvider>(new Ninject.Parameters.IParameter[] { });
}
})
.InRequestScope();
}发布于 2016-01-08 11:38:12
我只是做了一些尼尼姆和MVC的实验。我碰巧在我的直播网站上有你在问题中提到的两句话,但直到现在我还没有真正想过为什么需要它们,除了我需要它注入WebAPI之外。
我在Visual中创建了一个全新的ASP.NET MVC项目,安装了Nuget包Ninject.MVC5。我添加了一个简单的接口、具体的实现,并向RegisterServices()类的NinjectWebCommon方法添加了一个绑定。
在将绑定添加到MVC控制器之后,它刚刚工作,接口在构造函数中被解析为具体的类。可以说,尼尼莫的MVC版本可以直接“开箱即用”,而不必显式地分配依赖项注入器。
我查看了用于Ninject.Web.WebApi的Github,主页上有一个示例项目,您可以下载它,其中有三个注入到WebAPI的示例应用程序。解决方案中的示例WebAPI示例(不是OwinHosted或SelfHosted项目)也没有分配DependencyResolver.我在恢复了Nuget包之后运行了它,它可以工作。
我意识到这并不能完全回答这个问题,但我认为仔细看看WebApi项目的例子可能会发现答案。或者是因为ASP.NET MVC和WebAPI存在于同一个项目中,而我们想要注入到这两个项目中呢?
https://stackoverflow.com/questions/34672259
复制相似问题