NinjectMVC3 2.2.00和会员提供商

时间:2012-02-09 01:55:08

标签: asp.net-mvc-3 ninject membership-provider

有谁知道如何使用NinjectMVC3.cs注入自定义成员资格提供程序类?我用谷歌搜索并尝试了每一个实现,但没有一个工作。有人这样做吗?我尝试使用属性属性注入[Inject]不起作用,并且不知道任何其他方式,因为构造函数注入也不起作用。

这些都不起作用:

public class AccountMembershipProvider : MembershipProvider
[Inject]
protected IAccountRepository accountRepository { get; set; } 

//NinjectMVC.cs RegisterServices
kernel.Bind<IAccountRepository>().To<AccountRepository>();
kernel.Bind<MembershipProvider>().ToProvider<AccountMembershipProvider>();

public class AccountMembershipProvider : MembershipProvider
[Inject]
protected IAccountRepository accountRepository { get; set; }  

//NinjectMVC.cs RegisterServices
kernel.Bind<IAccountRepository>().To<AccountRepository>();
kernel.Bind<MembershipProvider>().ToMethod(ctx=>Membership.Provider); 

注入自定义成员资格提供程序的完整示例很不错。

1 个答案:

答案 0 :(得分:0)

Ninject 3.0.0正在实例化自定义成员资格提供程序使用的IRepository,虽然我收到了上下文错误,所以我将 .InRequestScope 添加到 IAccountRepository绑定< / strong>即可。你能检查绑定是否正确吗?我是否需要在IAccount存储库上使用InRequestScope,还是需要在HttpModule中实现一些代码?

这就是我所拥有的

//custom membership provider
public class AccountMembershipProvider : MembershipProvider
{
    [Inject]
    public IAccountRepository accountRepository
    {
        get;
        set;
    }
//example method
public override int GetNumberOfUsersOnline()
    {          
        return this.accountRepository.TotalUsers;
    }


//AccountRepository
 public class AccountRepository : IAccountRepository
{
    private EFDbContext context;

    public AccountRepository(EFDbContext dbContext)
    {
        this.context = dbContext;
    }

public int TotalUsers
    {
        get { return this.context.Users.Count(); }
    }


//HttpModule  Do I need to implement anything here ???
public class ProviderInitializationHttpModule : IHttpModule
{
    public ProviderInitializationHttpModule(MembershipProvider membershipProvider){}
    public void Init(HttpApplication context){}
    public void Dispose{}        
} 


//NinjectWebCommon.cs    RegisterServices
//dbContext bindings
kernel.Bind<EFDbContext>().ToSelf().InRequestScope();
kernel.Bind<IDbContext>().ToMethod(ctx => ctx.Kernel.Get<EFDbContext>());
kernel.Bind<DbContext>().ToMethod(ctx => ctx.Kernel.Get<EFDbContext>());

//Repository - I had to add .InRequestScope so the Memeberhip Provider doesn't 
//dispose the dbcontext. I believe this is because of the HttpModule disposing
kernel.Bind<IAccountRepository>().To<AccountRepository>().InRequestScope();**

//Custom Membership implemented using the Repository Pattern
kernel.Bind<MembershipProvider>().ToMethod(ctx=>Membership.Provider);
kernel.Bind<IHttpModule>().To<ProviderInitializationHttpModule>();