netcore 获取当前请求的上下文中的Scope

10/21/2022 4:20:38 PM
604
0
using (var scope = _services.CreateScope())
{
	var xxxService = scope.ServiceProvider.GetRequiredService<XXXXService>();
                    xx
 
	……
}

上面代码通过创建一个scope对象来获取 XXXXService  服务,实际是创建了一个全新是scope对象,这里获取到的 XXXXService  也跟当前请求上下文中的  其他地方的 XXXXService 不是同一个对象。

出了using 范围后, scope即刻回收,并释放  XXXXService  对象。如果在子类中使用  XXXXService  则回报告  XXXXService 已经被释放,无法使用的错误。因此我们需要更换一种方法,以获取net运行时为当前上下文中的scope。如下面代码所示

在Autofac中使用下面语句获取



public BaseController()
{
	//var scope = HttpContextUtil.Current.RequestServices.GetService<IServiceScope>();
	var scope = HttpContextUtil.Current.RequestServices.GetService<ILifetimeScope>();
	this.userService = scope.Resolve<UserService>(); 
}

原生ioc使用下面语句获取服务,不用获取scope

HttpContext.RequestServices.GetService(typeof(className));

 

全部评论



提问