ASP.NET MVC 3 Ninject 自定义会员和角色提供程序

7

您好,我遇到了一些启用自定义会员和角色提供程序的问题,出现了以下错误:

在当前 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;}

我的MembershipProvider:

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>

https://dev59.com/913Va4cB1Zd3GeqPBpGr https://dev59.com/7VjUa4cB1Zd3GeqPULwX http://stackoverflow.com/questions/8409109/how-to-inject-repositories-into-a-custom-membershipprovider - Mauricio Scheffer
https://dev59.com/cU7Sa4cB1Zd3GeqP1THq ...还有许多其他的。 - Mauricio Scheffer
是的,我看到了所有这些,但我的应用程序仍然无法启动。 - Nozi
我受到了这个问题版本的帮助:https://dev59.com/yW3Xa4cB1Zd3GeqPeGfR - Michael La Voie
2个回答

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

我曾经遇到过同样的问题。我的解决方法是将存储库方法更改为公共方法。Ninject无法注入私有属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接