asp.net core2.0 依赖注入 AddTransient与AddScoped的区别
asp.net core主要提供了三种依赖注入的方式
其中AddTransient与AddSingleton比较好区别
AddTransient瞬时模式:每次都获取一个新的实例
AddSingleton单例模式:每次都获取同一个实例
而AddTransient与AddScoped的区别更不容易区别一点
首先这两种方式每次请求得到的都不是同一个对象,从这点看会发现这两个都一样。
但是我们可以继续分细一点,虽然不同的请求得到的结果不同,但是我们可以在同一次请求中去获取多次实例测试。
AddTransient注入方式获取两次实例
- services.AddTransient<IUserBLL, UserBll>();
这里重新获取一个实例纠错写法:
IUserBLL aaa=(IUserBLL )HttpContext.RequestServices.GetService(typeof(IUserBLL ));
可以看到瞬时模式即使同一次请求中也是不同的对象
AddScoped注入方式获取两次实例
- services.AddScoped<IUserBLL, UserBll>();
可以发现AddScoped在同一次请求中,获取多次对象得到的是同一个对象
小结:
AddTransient瞬时模式:每次请求,都获取一个新的实例。即使同一个请求获取多次也会是不同的实例
AddScoped:每次请求,都获取一个新的实例。同一个请求获取多次会得到相同的实例
AddSingleton单例模式:每次都获取同一个实例