依赖注入 – 在NInject中绑定MembershipProvider时是否应该使用InSingletonScope?

前端之家收集整理的这篇文章主要介绍了依赖注入 – 在NInject中绑定MembershipProvider时是否应该使用InSingletonScope?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对NInject绑定很新,这里是NInject描述的.

> TransientBehavior – 类型的新实例将在每次请求时创建.
> SingletonBehavior – 只会创建一个类型的单个实例,并为每个后续请求返回相同的实例.
> OnePerThreadBehavior – 每个线程将创建一个类型的实例.
> OnePerRequestBehavior – 每个Web请求将创建一个类型的实例,并且在请求结束时将被销毁.

如果我想将MembershipProvider绑定到sqlMembershipProvider,我应该使用SingletonBehavior,因为我只需要一个sql会员提供者?

ASP.Net已经通过静态Membership类及其静态Provider属性提供了当前成员资格提供者的静态实例.绑定可能在您的Application_Start方法中,看起来像这样:
Bind<MembershipProvider>()
  .ToMethod(ctx => Membership.Provider);

再次,因为Memberhip.Provider是一个静态的,它已经像一个单例,所以你尝试应用的行为并不重要.

通过不指定上述代码段中的任何行为,Ninject将默认为暂时的行为.在这种绑定中,我相信这将相当于在每次需要注入MembershipProvider类型时调用lambda来返回Membership.Provider.

我想可能有一个明确指定单例行为的参数,因为Ninject可能会首次需要注入MembershipProvider“缓存”lambda返回的值,从而节省了执行lambda的开销.我不是100%肯定这是Ninject在这种情况下的工作,但它似乎是合理的.

所有这一切,我个人的喜好是使用OnePerRequestBehavior,这样我知道Ninject将会为每个请求调用我的lambda一次.不知道这是有必要的,但是我喜欢从Membership中获取提供者的想法.每次请求后都会提供一次,因为我想你不能对Membership.Provider设置的方式或时间做出假设,尽管你可能会发现你是否挖得足够与反射器.

Bind<MembershipProvider>()
  .ToMethod(ctx => Membership.Provider)
  .Using<OnePerRequestBehavior>();

祝你好运.抱歉你的问题在这里呆了这么久!

猜你在找的设计模式相关文章