asp.net core 服务的生命周期(DI)
2021-01-16 11:13
标签:执行 进程 快递员 如何 title 快递公司 收货 readonly 一个 首先,我们想象一个这样一个场景。假设我们有寄快递的需求,那么我们会致电快递公司:“我们要寄快递,派一个快递员过来收货”。接着,快递公司会如何做呢? 1.Transient:每一次GetService都会创建一个新的实例 瞬间生命周期 : 每次需要创建一个全新的 2.Scoped:在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request级别只创建一个实例,同一个http request会在一个 scope内) 单例进程唯一实例 :每一次请求都是同一个(多用于时间) 3.Singleton:整个应用程序生命周期内只创建一个实例 上面描述的比较抽象,不容易理解,用实例来讲解会比较直观。 下面通过具体的例子进行演示。 定义三个空的接口:IArticleService、IProductService、IUserService 然后定义三个实现:ArticleService、ProductService、UserService 1.将接口和实现注入到DI容器 在StartUp类的ConfigureServices方法添加下图代码 2.添加私有字段,在测试Controller:LifeTimeController中添加下图代码 3.添加构造方法 4.添加测试代码 5.执行结果 可见 transient类型的生命周期,每次使用都不一样,不同的类或不同的方法使用都不一样 scope类型的生命周期,在同一个请求内是一样的 singleton类型的生命周期,每次请求都是一样的 所以理解了生命周期的作用,我们在开发的时候就可以根据需要对不同的服务选择不同的生命周期了。 asp.net core 服务的生命周期(DI) 标签:执行 进程 快递员 如何 title 快递公司 收货 readonly 一个 原文地址:https://www.cnblogs.com/xiewenyu/p/13377631.html
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.Configure
private readonly IUserService _userService1;
private readonly IUserService _userService2;
private readonly IArticleService _articleService1;
private readonly IArticleService _articleService2;
private readonly IProductService _productService1;
private readonly IProductService _productService2;
public LifeTimeController(
IUserService userService1, IUserService userService2,
IArticleService articleService1, IArticleService articleService2,
IProductService productService1, IProductService productService2
)
{
_userService1 = userService1;
_userService2 = userService2;
_articleService1 = articleService1;
_articleService2 = articleService2;
_productService1 = productService1;
_productService2 = productService2;
}
public IActionResult Index()
{
var sb = new StringBuilder();
sb.Append("transient1:" + _userService1.GetHashCode() + "
");
sb.Append("transient2:" + _userService2.GetHashCode() + "
");
sb.Append("scope1:" + _articleService1.GetHashCode() + "
");
sb.Append("scope2:" + _articleService2.GetHashCode() + "
");
sb.Append("singleton1:" + _productService1.GetHashCode() + "
");
sb.Append("singleton2:" + _productService2.GetHashCode() + "
");
Response.ContentType = "text/html";
return Content(sb.ToString());
}第一次刷新:
transient1:66454027
transient2:35021870
scope1:38350037
scope2:38350037
singleton1:4417230
singleton2:4417230
第二次刷新:
transient1:103653
transient2:5079042
scope1:47546512
scope2:47546512
singleton1:4417230
singleton2:4417230
文章标题:asp.net core 服务的生命周期(DI)
文章链接:http://soscw.com/index.php/essay/42686.html