Ninject,在Ninject初始化的RegisterServices中注入Membership.Provider

时间:2012-04-07 09:24:40

标签: asp.net asp.net-mvc-3 ninject.web.mvc

有人知道如何在ninject初始化代码的RegisterServices中配置Membership.Provider吗?

在我的代码中:

    /// <summary>
    /// Load your modules or register your services here!
    /// </summary>
    /// <param name="kernel">The kernel.</param>
    private static void RegisterServices(IKernel kernel)
    {
        // Put additional bindings here
        kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>();
        kernel.Bind<IUnitOfWork>().To<UnitOfWork>();
        kernel.Bind<IUserRepository>().To<UserRepository>();
        kernel.Bind<IRoleRepository>().To<RoleRepository>();
        kernel.Bind<ISecurityService>().To<SecurityService>();
        kernel.Inject(Membership.Provider);
        kernel.Inject(Roles.Provider);
    }

所有模块都绑定,但kernel.Inject行除外。我收到错误:“在应用程序的启动前初始化阶段无法调用此方法”。

该文件是标准nuget ninject.mvc安装的NinjectWebCommon。 我正在尝试创建自定义成员资格提供程序并在提供程序中注入服务层(SecurityService)。

任何帮助?

1 个答案:

答案 0 :(得分:2)

我用同样的问题撞到了墙上,我终于找到了一个相对干净的解决方案here

基本方法是:

  1. 在自定义成员资格提供程序类中的任何依赖项属性上使用[Inject]属性。

  2. 创建一个http模块,立即解析/注入您的提供程序(Ninject 3支持注入HttpModule)。

  3. 使用提供程序和新HttpModule的绑定替换inject方法中的最后2 RegisterServices()个语句。

    kernel.Bind<MembershipProvider>().ToMethod(ctx => Membership.Provider);  kernel.Bind<IHttpModule>().To<ProviderInitializationHttpModule>();