有谁知道如何使用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);
注入自定义成员资格提供程序的完整示例很不错。
答案 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>();