我对 NInject 绑定(bind)很陌生,这就是 NInject 所描述的。
如果我想将 MembershipProvider 绑定(bind)到 SqlMembershipProvider,我应该使用 SingletonBehavior,因为我只需要一个 sql 成员资格提供程序吗?
最佳答案
ASP.Net 已经通过静态 提供了当前成员资格提供程序的静态实例。成员(member)类及其静态提供者 属性(property)。绑定(bind)可能在您的 Application_Start 方法中,看起来像这样:
Bind<MembershipProvider>()
.ToMethod(ctx => Membership.Provider);
同样,因为 Membership.Provider 是静态的,它已经有点像单例了,所以你尝试应用的行为并不重要。
通过在上述代码段中未指定任何行为,Ninject 将默认为 transient 行为。在这种绑定(bind)中,我相信这相当于调用返回 的 lambda。 Membership.Provider 每次需要注入(inject)一个 MembershipProvider 类型。
我想可能有一个参数来明确指定单例行为,因为 Ninject 第一次需要注入(inject) 时可能会“缓存” lambda 返回的值。 MembershipProvider ,实际上节省了执行 lambda 的开销。我不能 100% 确定 Ninject 在这种情况下会如何工作,但这样做似乎是合理的。
综上所述,我个人的偏好是使用 OnePerRequestBehavior ,这样我就知道 Ninject 会为每个请求调用一次我的 lambda。不确定是否有必要,但我喜欢从 获取提供程序的想法Membership.Provider 每个请求一次,因为我认为您无法对 的方式或时间做出假设Membership.Provider 设置好了,尽管您可能会发现您是否使用反射器进行了足够的挖掘。
Bind<MembershipProvider>()
.ToMethod(ctx => Membership.Provider)
.Using<OnePerRequestBehavior>();
祝你好运。抱歉,您的问题在这里搁置了这么久!
关于dependency-injection - 在 NInject 中绑定(bind) MembershipProvider 时应该使用 InSingletonScope 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1054152/