2 服务的生命周期

服务的生命周期

单例:

服务只被实例化一次,后面所有的请求都只用这一个创建好的实例,需要注意多线程问题;

也就是这个服务里面的东西最好不要存在外部的变量, 这样每个实例都可能会修改它,而且修改的时候这个值可能已经发生了改变,需要加锁;

内部的变量则无所谓;

services.AddSingleton<IProductService, ProductService>();

作用域

每次请求服务都会被创建一次,然后这个实例化的对象,在后面整个的中间件和Controller 中被反复使用;

比如EF Context

services.AddScoped<IProductService, ProductService>();

瞬时

每次请求都会被创建一次,甚至是

services.AddTransient<IProductService, ProductService>();

服务生命周期

服务释放

容器为其创建的 IDisposable 类型调用 Dispose。 从容器中解析的服务绝对不应由开发人员释放。 如果类型或工厂注册为单一实例,则容器自动释放单一实例

posted @ 2022-12-26 22:25  maanshancss  阅读(30)  评论(0编辑  收藏  举报