3

有人知道如何在 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)。

有什么帮助吗?

4

1 回答 1

2

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

基本方法是:

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

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

  3. 将方法中的最后两条inject语句替换RegisterServices()为提供程序和新 HttpModule 的绑定。

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

于 2012-07-08T14:24:35.760 回答