ASP.Net 已经通过静态Membership类及其静态Provider属性提供了当前成员资格提供程序的静态实例。绑定可能在您的 Application_Start 方法中,看起来像这样:
Bind<MembershipProvider>()
.ToMethod(ctx => Membership.Provider);
同样,因为Memberhip.Provider是静态的,它已经有点像单例了,所以你尝试应用的行为并不那么重要。
通过在上述代码段中未指定任何行为,Ninject 将默认为瞬态行为。在这种绑定中,我相信每次需要注入MembershipProvider类型 时都会调用返回Membership.Provider的 lambda。
我想可能有一个参数来明确指定单例行为,因为 Ninject 第一次需要注入MembershipProvider时可能会“缓存” lambda 返回的值,实际上节省了执行 lambda 的开销。我不能 100% 确定 Ninject 在这种情况下会如何工作,但这样做似乎是合理的。
综上所述,我个人的偏好是使用OnePerRequestBehavior,这样我知道 Ninject 将为每个请求调用一次我的 lambda。不确定是否有必要,但我喜欢每次请求都从Membership.Provider获取提供程序的想法,因为我认为您无法假设Membership.Provider的设置方式或时间,尽管您可能会发现您是否足够深入带反光板。
Bind<MembershipProvider>()
.ToMethod(ctx => Membership.Provider)
.Using<OnePerRequestBehavior>();
祝你好运。抱歉,您的问题在这里搁置了这么久!