我在我的应用程序中使用了默认的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是否执行了一些在我自己的应用程序代码之前运行的内部初始化?
由于 本
答案 0 :(得分:2)
是的,在AppDomain启动时,ASP.Net运行时会初始化提供程序,远远超过任何代码执行的时间。
您可能需要选择另一个点来进行合成,可能在Global.Application _ ???。
中