Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 MVC4/Ninject-如何在身份验证后更改绑定_Asp.net Mvc 4_C# 4.0_Asp.net Web Api_Ninject - Fatal编程技术网

Asp.net mvc 4 MVC4/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>

我将MVC4与Ninject(4.0.30319)和NinjectWebCommon.cs一起使用。我已经为MVC和WebAPI设置了Ninject并使用了一组常见的绑定

            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);
}