ASP.NET MembershipProvider和StructureMap

时间:2010-05-09 22:14:07

标签: asp.net-membership structuremap

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

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

For<MembershipProvider>().Use(Membership.Provider);

这将使用web.config中配置的MembershipProvider。这一切都很有效。

但是,现在我已经推出了自己的MembershipProvider,它使用了一个存储库类。由于MembershipProvider不完全符合IoC,我将以下代码添加到MembershipProvider.Initialize方法:

_membershipRepository = ObjectFactory.GetInstance<IMembershipRepository>();

然而,这引发了一个异常,就像StructureMap尚未初始化(无法获取IMembershipRepository的实例)。但是,如果我删除代码并在我的MembershipProvider的initialize方法和我的StructureMap引导程序中放置断点,那么确实会出现在初始化MembershipProvider之前配置StructureMap。

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

由于 本

1 个答案:

答案 0 :(得分:2)

是的,在AppDomain启动时,ASP.Net运行时会初始化提供程序,远远超过任何代码执行的时间。

您可能需要选择另一个点来进行合成,可能在Global.Application _ ???。