UPDATE定義無參數的構造函數 - 請看看我的答案爲解決方案的這個問題ASP.NET MVC 4 + Ninject MVC 3 =此對象
一個鏈接,並解釋我們開始之前,我知道這是一個非常普遍的問題,我一直在使用Ninject的許多衛星沒有問題,但現在它出現了,我找不出一個修復。另外,不,Google和SO迄今爲止的結果都沒有幫助我。
因此,考慮下面的代碼位上一個非常,非常,非常簡單的原型ASP.NET MVC 4從Visual Studio 2012在Windows Server 2008 R2的項目運行:
public class DefaultController : Controller {
private IGroupPrincipalRepository GroupPrincipalRepository { get; set; }
[Inject]
public DefaultController(
IGroupPrincipalRepository groupPrincipalRepository) {
this.GroupPrincipalRepository = groupPrincipalRepository;
}
}
而這裏的NinjectWebCommon.cs RegisterServices
方法:現在
kernel.Bind(typeof(IGroupPrincipalRepository)).ToConstructor(
c =>
new GroupPrincipalRepository(new PrincipalContext(ContextType.Domain, "?", "?", "?", "?"))).InSingletonScope();
,這是怎麼了我的那個(在.NET 4中,但ASP.NET MVC 3)工作中使用Ninject和其他項目,據我所知,這是使一切工作所需的內容。那麼,爲什麼我突然變得沒有爲這個對象定義無參數的構造函數。例外?
UPDATE
下面是完整的NinjectWebCommon.cs
文件:
[assembly: WebActivator.PreApplicationStartMethod(typeof(App_Start.NinjectWebCommon), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(App_Start.NinjectWebCommon), "Stop")]
namespace App_Start {
using System;
using System.DirectoryServices.AccountManagement;
using System.Repositories.ActiveDirectory;
using System.Web;
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
using Ninject;
using Ninject.Web.Common;
public static class NinjectWebCommon {
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
public static void Start() {
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
public static void Stop() {
bootstrapper.ShutDown();
}
private static IKernel CreateKernel() {
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
private static void RegisterServices(
IKernel kernel) {
kernel.Bind(typeof(IGroupPrincipalRepository)).ToConstructor(
c =>
new GroupPrincipalRepository(new PrincipalContext(ContextType.Domain, "", "", "", ""))).InSingletonScope();
}
}
}
更新 - 請大家看我的回答對解決方案的鏈接,並解釋了這個問題
你在哪裏創建你的DependecyResolver並覆蓋默認值? – Josh
我以爲這就是'NinjectWebCommon.cs'文件正在做什麼,如果沒有,那麼我想答案是「沒有地方」。再一次,我的目標混亂,因爲我的其他項目以這種方式工作,我已經檢查了兩倍和三倍,以確保我沒有說謊... – Gup3rSuR4c
Ninject.MVC包中有一個'NinjectMvcHttpApplicationPlugin',它負責'DependecyResolver'...所以它應該只是工作?你如何安裝Ninject.MVC?用Nuget? – nemesv