> TransientBehavior – 类型的新实例将在每次请求时创建.
> SingletonBehavior – 只会创建一个类型的单个实例,并为每个后续请求返回相同的实例.
> OnePerThreadBehavior – 每个线程将创建一个类型的实例.
> OnePerRequestBehavior – 每个Web请求将创建一个类型的实例,并且在请求结束时将被销毁.
如果我想将MembershipProvider绑定到sqlMembershipProvider,我应该使用SingletonBehavior,因为我只需要一个sql会员提供者?
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>();
祝你好运.抱歉你的问题在这里呆了这么久!