ASP.NET MVC 3 Ninject自定义成员身份和角色提供者

时间:2012-02-11 15:50:13

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

嗨我在启用自定义成员资格和角色提供程序时遇到了一些问题,我收到了以下错误:

  

在执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

System.InvalidOperationException:找不到默认成员资格提供程序。

它指向我的mvc3.ninject kernel.Inject(Membership.Provider)

我的MVC3.Ninject在app_start中:

private static void RegisterServices(IKernel kernel)
{
    kernel.Inject(Membership.Provider);
    kernel.Inject(Roles.Provider);
    kernel.Bind<IUnitOfWork>().To<EFContext>().InRequestScope();
    kernel.Bind<IUzytkownicyRepository>().To<UzytkownicyRepository>().InRequestScope();            
}  

我的角色提供者:

public class DziennikRoleProvider : RoleProvider
{
    [Inject]
    private IUzytkownicyRepository repository { get; set;}

我的会员提供者:

public class DziennikMembershipProvider : MembershipProvider
{
    [Inject]
    private IUzytkownicyRepository repository { get; set; }

我的WebConfig文件:

 <membership defaultProvider="DziennikMembershipProvider">
  <providers>
    <clear/>
    <add name="DziennikMembershipProvider" type="Dziennik_MVC.Helpers.DziennikMembershipProvider, Dziennik_MVC" connectionStringName="EFDbContext"
         applicationName="/" />
  </providers>
</membership>

<profile>
  <providers>
    <clear/>
  </providers>
</profile>

<roleManager defaultProvider="DziennikRoleProvider" enabled="true" cacheRolesInCookie="true">
  <providers>
    <clear />
    <add name="DziennikRoleProvider" type="Dziennik_MVC.Helpers.DziennikMembershipProvider, Dziennik_MVC" connectionStringName="EFDbContext" />
  </providers>
</roleManager>

2 个答案:

答案 0 :(得分:8)

您必须在注入提供者之前设置绑定

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<IUnitOfWork>().To<EFContext>().InRequestScope();
    kernel.Bind<IUzytkownicyRepository>().To<UzytkownicyRepository>().InRequestScope();

    kernel.Inject(Membership.Provider);
    kernel.Inject(Roles.Provider);
}

答案 1 :(得分:1)

我遇到了同样的问题。我的解决方案是将存储库方法更改为Public。 Ninject不能注入私有财产。