网站推广营销联系方式,百度排名推广,三语网站建设,react wordpress 知乎文章目录 作用域 作用域由IServiceScope接口承载 对象释放 实现IDisposable接口类型释放 1.DI只负责释放由其创建的对象实例 2.DI在容器或子容器释放时#xff0c;释放由其创建的对象实例 建议 1.避免在根容器获取实现IDisposable接口的瞬时服务 2.避免手动创建实现了IDispo… 文章目录 作用域 作用域由IServiceScope接口承载 对象释放 实现IDisposable接口类型释放 1.DI只负责释放由其创建的对象实例 2.DI在容器或子容器释放时释放由其创建的对象实例 建议 1.避免在根容器获取实现IDisposable接口的瞬时服务 2.避免手动创建实现了IDisposable对象应该使用容器来管理其生命周期
// 申明接口
public interface IOrderService
{
}public class DisposableOrderService : IOrderService,IDisposable
{public void Dispose(){Console.WriteLine($DisposableOrderService Disposed:{this.GetHashCode()});}
} // 注册服务
public void ConfigureServices(IServiceCollection services)
{services.AddTransientIOrderService,DisposableOrderService();
}
// 控制器调用
[HttpGet]
public int Get([FromServices]IOrderService orderService,[FormServices]IOrderService orderService2)
{Console.WriteLine(接口请求处理结束);return 1;
}
调用方法输出结果为:
接口请求处理结束
DisposableOrderService Disposed:37423742395
DisposableOrderService Disposed:82374273598
意味着瞬时对象在整个请求结束后才释放
继续使用其他声明周期声明方式,可得出以下结论: Scope生命周期中,作用域内为同一对象, Singleton生命周期中执行完请求对象不会被释放当应用程序被关闭时对象会被释放
如果在根容器中获取注册的瞬时服务那么服务对象一直不会被释放直到应用程序退出为止