Asp.net mvc 3 NinjectMVC3 2.2.00和会员资格提供商
有人知道如何使用NinjectMVC3.cs注入自定义成员资格提供程序类吗?我在谷歌上搜索并尝试了每一个实现,但都没有成功。有人这样做吗?我已经尝试过使用属性[Inject]进行注入,但不起作用,也不知道其他方法,因为构造函数注入也不起作用 这些都不起作用:Asp.net mvc 3 NinjectMVC3 2.2.00和会员资格提供商,asp.net-mvc-3,ninject,membership-provider,Asp.net Mvc 3,Ninject,Membership Provider,有人知道如何使用NinjectMVC3.cs注入自定义成员资格提供程序类吗?我在谷歌上搜索并尝试了每一个实现,但都没有成功。有人这样做吗?我已经尝试过使用属性[Inject]进行注入,但不起作用,也不知道其他方法,因为构造函数注入也不起作用 这些都不起作用: public class AccountMembershipProvider : MembershipProvider [Inject] protected IAccountRepository accountRepository { ge
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);
一个注入自定义成员资格提供程序的完整示例会很好。Ninject 3.0.0可以工作,它实例化了自定义成员资格提供程序使用的IRepository,尽管我正在获取上下文,但已处理错误,因此我将.InRequestScope添加到IACountRepository绑定中。你能检查一下绑定是否正确吗?我需要在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>();
我使用unity,但如何尝试将成员资格提供程序对象化到控制器中呢。然后通过构造函数注入,您可以将存储库注入到成员资格提供程序中,也可以将属性注入用法作为无冲突的tk。。不依赖于自定义成员资格提供程序。我正在使用自定义成员资格提供程序中的存储库,成员资格提供程序是通过web配置设置的。如果我要将成员身份注入控制器,那么我甚至可能不使用ASPNET成员身份提供程序,这正是我准备要做的。使用带有DI的MS Provider模型几乎不值得头痛。非常感谢您的回复,我非常感谢。我昨晚读了一篇有趣的文章,介绍了在提供者中解决的另一种技术-尽管本质上它与下面的Remo完全相同,仅使用Castle Windsor:我确实使用Remo的解决方案使用Ninject 3.0.0,但我必须将.InRequestScope添加到AccountRepository,这似乎有点可笑,因为我有.InRequestScope的dbContext??如果我在memberhsip提供程序之前调用另一个存储库,那么它不会公开,但如果我不公开,它会抛出ObjectContext disposed错误,我认为这是因为HttpModule中的Dispose方法,我不知道是否应该在其中实现某些内容。Castle Windsor解决方案看起来确实干净多了,但我不会放弃Ninject just yetI,只要我完成这篇文章,我就会在github上发布一个完整的示例应用程序。感谢您的回复,Adam我会在示例app.Membership.Provider上向您发布消息。它的生命周期比请求长得多。因此,它不能依赖于请求范围中的任何依赖项。最终将引用死对象。存储库的范围不会改变数据库上下文的处理。现在两者都被处置了。最好是注入一个facory,为每个用户验证重新创建存储库,而不是存储库本身。请参阅:如果提供程序是account entities singleton作用域上唯一的一个操作,那么它可能会起作用。忘记我的其他注释,我真的很困惑。我打算再试试工厂法。我完全忘记了实体框架对其他数据库的支持。我试图通过使用存储库围绕实体框架进行编码,而不是记住我正在使用接口进行测试和DI。哇,过了一段时间,这些东西变得令人困惑。我重新创建了这个项目,由于某种原因,我无法重新创建我昨天遇到的问题。我所有的代码都和上面一样,但是没有InRequestScope。也许我还在引用一个旧的Ninject DLL。