同时使用InRequestScope和InTransientScope将Ninject解析为相同类型
我有一个Ninject设置,创建一个JobContext解析器InRequestScope()
这很好,但是,我在网站上有一个非常具体的调用,要求我循环几个数据库(数据库中的所有数据按年)。 我无法弄清楚发生了什么,因为我忘记了JobContext是InRequestScope
但最后一段代码并没有按照我的想法行事。
这是设置
//Ninject module Bind().To().InRequestScope(); //Controller's Initialize protected override void Initialize(System.Web.Routing.RequestContext requestContext) { base.Initialize(requestContext); //set a connection string for the jobContext this.jobContext = DependencyResolver.Current.GetService(); jobContext.SetYear(currentYear); }
由于JobContext在请求范围内,因此每年都会重复使用相同的对象。 这是我需要InTransientScope
而不是InRequestScope
的唯一实例。
//Special function foreach (int year in ActiveYears) { jobContext = DependencyResolver.Current.GetService(); jobContext.SetYear(year); DoSomething(); }
我怎么能做到这一点?
出现的一个问题是,如果您确实需要JobContext请求范围,有时在其他情况下需要瞬态范围。 似乎有一种设计气味! 在执行以下操作之前,请尝试解决此问题。
如果你真的想按照你所描述的方式去做,你必须指定两个不同的命名绑定,一个在瞬态,一个在请求范围内,它们按名称获取。
this.Bind().To().InRequestScope().Named("RequestScoped"); this.Bind().To().InTransientScope().Named("TransientScoped"); kernel.Get("RequestScoped");
另一件事:我试图摆脱Ninject内核的ServiceLocator类型使用并改为使用dependency injection。 我会得到一个更好的设计。
上述就是C#学习教程:同时使用InRequestScope和InTransientScope将Ninject解析为相同类型分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1026310.html