Asp.net membership ASP.NET成员资格提供程序和结构映射

Asp.net membership ASP.NET成员资格提供程序和结构映射,asp.net-membership,structuremap,Asp.net Membership,Structuremap,我在应用程序中使用了默认的AspNetSqlMembershipProvider。身份验证是通过AuthenticationService执行的(因为我还支持其他形式的成员身份,比如OpenID) 我的AuthenticationService将MembershipProvider作为构造函数参数,我使用StructureMap注入依赖项,如下所示: For<MembershipProvider>().Use(Membership.Provider); For().Use(Memb

我在应用程序中使用了默认的AspNetSqlMembershipProvider。身份验证是通过AuthenticationService执行的(因为我还支持其他形式的成员身份,比如OpenID)

我的AuthenticationService将MembershipProvider作为构造函数参数,我使用StructureMap注入依赖项,如下所示:

For<MembershipProvider>().Use(Membership.Provider);
For().Use(Membership.Provider);
这将使用web.config中配置的MembershipProvider。所有这些都很有效

然而,现在我已经推出了自己的MembershipProvider,它使用了一个repository类。由于MembershipProvider并不完全友好,因此我向MembershipProvider.Initialize方法添加了以下代码:

_membershipRepository = ObjectFactory.GetInstance<IMembershipRepository>();
\u membershipRepository=ObjectFactory.GetInstance();
但是,这会引发一个异常,比如StructureMap尚未初始化(无法获取IMembershipRepository的实例)。但是,如果我删除代码并在MembershipProvider的initialize方法和StructureMap引导程序上放置断点,则在初始化MembershipProvider之前,StructureMap似乎已配置

到目前为止,我唯一的解决方法是将上述代码添加到MembershipProvider中需要存储库的每个方法中。这很好,但是我很好奇为什么我不能在Initialize方法中获得我的实例。MembershipProvider是否在我自己的任何应用程序代码之前执行一些内部初始化

谢谢
Ben

是的,当AppDomain启动时,提供程序由ASP.Net运行时初始化,远远早于代码的任何执行


您需要选择另一个点来完成您的作文,可能是在Global.Application_???

感谢您的回复。我想我会继续在每个成员资格提供程序方法中获取我的实例,而不是更改我的组合点-其他一切正常-也许我们会在.NET 5中获得一些DI友好的提供程序:)根据我的经验,memebership提供程序的Initialize方法是在应用程序启动后调用的,因此,国际奥委会启用会员资格提供者并不难。另一方面,健康监测提供者。。。他们的initialize方法似乎在app_启动之前被调用,所以他们提出了一些有趣的挑战。