1

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

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

在 Global.asax 中,我有一些一次性代码来确定用户何时通过身份验证,它调用 RegisterAuthenticatedServices 来更改绑定,并且它毫无例外地执行。问题是,在更改绑定并请求控制器后,MVC 抱怨“没有为此对象定义无参数构造函数”,我猜这意味着 DBDataContext 绑定在 Ninject 中被丢弃。不知道我做错了什么。

4

1 回答 1

0

取消绑定上下文,然后将其与更改绑定:

        public static void RegisterAuthenticatedServices()
    {
        bootstrapper.Kernel.Unbind<DBDataContext>();
        bootstrapper.Kernel.Bind<DBDataContext>().To<DBDataContext>().WithPropertyValue("ChangedByPKID", Globals.UserPKID);
    }
于 2013-10-30T17:47:51.210 回答