服务的生命周期
单例:
服务只被实例化一次,后面所有的请求都只用这一个创建好的实例,需要注意多线程问题;
也就是这个服务里面的东西最好不要存在外部的变量, 这样每个实例都可能会修改它,而且修改的时候这个值可能已经发生了改变,需要加锁;
内部的变量则无所谓;
services.AddSingleton<IProductService, ProductService>();
作用域
每次请求服务都会被创建一次,然后这个实例化的对象,在后面整个的中间件和Controller 中被反复使用;
比如EF Context
services.AddScoped<IProductService, ProductService>();
瞬时
每次请求都会被创建一次,甚至是
services.AddTransient<IProductService, ProductService>();
服务释放
容器为其创建的 IDisposable 类型调用 Dispose。 从容器中解析的服务绝对不应由开发人员释放。 如果类型或工厂注册为单一实例,则容器自动释放单一实例
标签:容器,生命周期,服务,创建,实例,services From: https://www.cnblogs.com/maanshancss/p/56619f612132a9f43e14b7acc4e2589a.html