標誌着其視爲重複之前,請先通過這個問題來閱讀的時候了!無參數的構造函數與Ninject,既MVC和網絡API
我在VS2015中創建一個新的Web應用程序項目,加入MVC 5和網絡API 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控制器和
確保控制器具有一個無參數時公共構造函數。創下了網絡API控制器時,
錯誤。
所以我有一個工作圍繞「解決」這個問題,我已經添加了這些2號線到NinjectWebCommon.cs
文件的CreateKernel
方法:
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();
}
但是爲什麼要將依賴解析器連接成Ninject代碼的一部分呢? –
如果不是,它應該是NinjectWebCommon類中代碼的一部分,但事實並非如此。如果你瀏覽一些關於SO的問題,它應該是顯而易見的。 –
本身顯示錯誤,您的控制器未註冊。 –