简介
- AddSingleton:此方法创建一个 Singletion 服务。首次请求时创建 Singleton 服务。然后,所有后续的请求中都会使用相同的实例。因此,通常每个应用程序只创建一次 Singleton 服务,并且在整个应用程序生命周期中使用该单个实例。生命周期最长。
- AddScoped:此方法创建一个 Scoped 服务。在范围内的每个请求中创建一个新的 Scoped 服务实例。例如在 Web 应用程序中,它为每个 HTTP 请求都创建 1 个实例,但在同一 Web 请求中的其它服务在调用这个请求的使用,都会使用相同的实例。注意,它在一个客户端请求中是相同的,但在多个客户端请求中是不同的
- AddTransient:此方法创建一个 Transient 服务。每次请求时,都会创建一个新的 Transient 服务实例。生命周期最短。
案例
测试代码
服务接口类
public interface ICountService
{
int GetCount();
}
public class CountService : ICountService
{
private int _count { get; set; }
public int GetCount()
{
_count++;
return _count;
}
}
控制器
private readonly ICountService _CountService;
private readonly ICountService _CountService2;
public HomeController(ICountService countService, ICountService countService2)
{
_CountService = countService;
_CountService2 = countService2;
}
public IActionResult Index()
{
ViewBag.Count = _CountService.GetCount();
ViewBag.Count2 = _CountService2.GetCount();
return View();
}
Index.cshtml
@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1>
统计数= @ViewBag.Count
</h1>
<h1>
统计数2= @ViewBag.Count2
</h1>
</div>
在Startup中的ConfigureServices方法中注册服务
// services.AddSingleton<ICountService, CountService>();//单例模式
// services.AddTransient<ICountService, CountService>();//瞬态模式
//services.AddScoped<ICountService, CountService>();//域模式
执行结果
- AddSingleton:统计数可以一直递增:(多用)
- AddScoped:统计数 最多增加到 2:
- AddTransient:统计数 一直是 1
区别
服务类型 |
同一个 HTTP 请求的范围 |
横跨多个不同 HTTP 请求 |
Singleton Service |
同一个实例 |
同一个实例 |
Scoped Service |
同一个实例 |
新实例 |
Transient Service |
新实例 |
新实例 |