Asp.net mvc 4 MVC4/Ninject-如何在身份验证后更改绑定
我将MVC4与Ninject(4.0.30319)和NinjectWebCommon.cs一起使用。我已经为MVC和WebAPI设置了Ninject并使用了一组常见的绑定Asp.net mvc 4 MVC4/Ninject-如何在身份验证后更改绑定,asp.net-mvc-4,c#-4.0,asp.net-web-api,ninject,Asp.net Mvc 4,C# 4.0,Asp.net Web Api,Ninject,我将MVC4与Ninject(4.0.30319)和NinjectWebCommon.cs一起使用。我已经为MVC和WebAPI设置了Ninject并使用了一组常见的绑定 private static IKernel CreateKernel() { var kernel = new StandardKernel(); kernel.Bind<Func<IKernel>
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
// Install our Ninject-based IDependencyResolver into the Web API config
GlobalConfiguration.Configuration.DependencyResolver = new NinjectWebAPIDependencyResolver(kernel);
// Install our Ninject-based IDependencyResolver into the MVC config
DependencyResolver.SetResolver(new NinjectMVCDependencyResolver(kernel));
return kernel;
}
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<DBDataContext>().To<DBDataContext>();
kernel.Bind<IChecksRepository>().To<ChecksRepository>();
kernel.Bind<IDepartmentsRepository>().To<DepartmentsRepository>();
kernel.Bind<IEmployeesRepository>().To<EmployeesRepository>();
kernel.Bind<IScheduleRepository>().To<ScheduleRepository>();
kernel.Bind<IVacanciesRepository>().To<VacanciesRepository>();
kernel.Bind<IVacancyTypes>().To<VacancyTypesRepository>();
}
public static void RegisterAuthenticatedServices()
{
bootstrapper.Kernel.Bind<DBDataContext>().To<DBDataContext>().WithPropertyValue("ChangedByPKID", Globals.UserPKID);
}
private静态IKernel CreateKernel()
{
var kernel=新的标准内核();
kernel.Bind().ToMethod(ctx=>()=>newbootstrapper().kernel);
kernel.Bind().To();
注册服务(内核);
//将基于Ninject的IDependencyResolver安装到Web API配置中
GlobalConfiguration.Configuration.DependencyResolver=新的NinjectWebAPI DependencyResolver(内核);
//将基于Ninject的IDependencyResolver安装到MVC配置中
SetResolver(新的NinjectMVCDependencyResolver(内核));
返回内核;
}
///
///在这里加载您的模块或注册您的服务!
///
///内核。
私有静态无效注册服务(IKernel内核)
{
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
}
公共静态无效注册表AuthenticatedServices()
{
bootstrapper.Kernel.Bind().To().WithPropertyValue(“changedByChid”,Globals.UserPKID);
}
在Global.asax中,我有一些一次性代码来确定用户何时经过身份验证,它调用RegisterAuthenticatedServices来更改绑定,并在没有异常的情况下执行。问题是,在更改绑定并请求控制器后,MVC抱怨“没有为该对象定义无参数构造函数”,我猜这意味着Ninject中的DBDataContext绑定被破坏了。不确定我做错了什么。解除上下文绑定,然后使用更改将其绑定回:
public static void RegisterAuthenticatedServices()
{
bootstrapper.Kernel.Unbind<DBDataContext>();
bootstrapper.Kernel.Bind<DBDataContext>().To<DBDataContext>().WithPropertyValue("ChangedByPKID", Globals.UserPKID);
}
公共静态无效注册表AuthenticatedServices()
{
bootstrapper.Kernel.Unbind();
bootstrapper.Kernel.Bind().To().WithPropertyValue(“changedByChid”,Globals.UserPKID);
}