Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 NinjectMVC3 2.2.00和会员资格提供商_Asp.net Mvc 3_Ninject_Membership Provider - Fatal编程技术网

Asp.net mvc 3 NinjectMVC3 2.2.00和会员资格提供商

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

有人知道如何使用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); 

一个注入自定义成员资格提供程序的完整示例会很好。

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。