NinjectMVC3 2.2.00 и поставщик членства - PullRequest
1 голос
/ 09 февраля 2012

Кто-нибудь знает, как использовать 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 голосов
/ 10 февраля 2012

Ninject 3.0.0 работает, он создает экземпляр IRepository, который используется провайдером нестандартного членства, хотя я получаю сообщение об ошибке удаления контекста, поэтому я добавил .InRequestScope в привязки IAccountRepository . Можете ли вы проверить правильность привязок? Нужно ли использовать InRequestScope в репозитории IAccount или мне нужно внедрить некоторый код в 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>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...