0

我有一个用于访问用户信息 IAccountCore 的存储库,并且我也有一个自定义成员资格提供程序,我也已经实现了它。我在会员提供程序中设置了属性注入,但似乎它们从未注入过。我已经按照网络上的所有示例无济于事。

我有 ninject 引导程序 + web 激活器在启动后方法中触发 kernel.Inject(Membership.Provider) 但属性始终为空。以下是一些代码片段:

WebApi 中的引导程序

[assembly: WebActivator.PostApplicationStartMethod(typeof(API.App_Start.NinjectWebCommon), "RegisterMembership")]

从上面调用的方法:

public static void RegisterMembership()
{
    //bootstrapper.Kernel.Inject(Membership.Provider);
    bootstrapper.Kernel.Load(new MembershipNinjectModule());
}

Ninject 模块(在不同的程序集/项目中):

public class MembershipNinjectModule : NinjectModule
{
    /// <summary>
    /// Loads the module into the kernel.
    /// </summary>
    public override void Load()
    {
        var kernel = Kernel;
        kernel.Inject(Membership.Provider);
    }
}

自定义会员提供程序中的属性:

[Inject]
public IAccountCore AccountCore {get;set;}

另一个 ninject 模块中的绑定:

public class NinjectConfigurator : NinjectModule 
{
    public override void Load()
    {
        var kernel = Kernel
        kernel.Bind<IAccountCore>().To<AccountCore>().InTransientScope();
    }
}

在 Ninject 引导程序中加载上述模块的代码:

private static void RegisterServices(IKernel kernel)
{
    kernel.Load(new NinjectConfigurator());
}
4

1 回答 1

1

尝试在您的自定义会员提供者的构造函数中添加这一行:

public MyCustomMembershipProvider()
{
    NinjectWebCommon.Kernel.Inject(this);
}

在我的项目中,我在 Ninject 中使用了一个自定义会员提供程序,而我的这一行比你多。

希望能帮助到你

于 2013-09-06T12:17:07.007 回答