目录
AddTransient,AddScoped,AddSingleton
使用.NET Core 3.1版本
注入服务到容器
我们在注入服务时,一般在Startup类的ConfigureServices方法中进行配置
public void ConfigureServices(IServiceCollection services)
{
}
在创建不同项目时,需要添加不同的服务到容器中
比如
创建一个WebAPI项目,需要添加服务services.AddControllers();,添加对控制器的支持
创建一个MVC项目,需要添加服务services.AddControllersWithViews();和services.AddRazorPages();,添加对控制器视图和Razor页面的支持,这是在.NET Core 3.x的配置,而在2.x则用services.AddMvc();,当然这种3.x也是可以使用的
注入自定义服务
定义一个服务
public interface IUserInfoService
{}
public class UserInfoService : IUserInfoService
{ }
public class UserInfoService2 : IUserInfoService
{ }
注入服务
services.AddSingleton<IUserInfoService, UserInfoService>();
使用服务
public class HomeController : Controller
{
private IUserInfoService _userInfoService;
public HomeController(ILogger<HomeController> logger, IUserInfoService userInfoService)
{
_userInfoService = userInfoService;
}
}
如果一个服务注入多个实现呢,比如这样
services.AddSingleton<IUserInfoService, UserInfoService>();
services.AddSingleton<IUserInfoService, UserInfoService2>();
这样则后面的生效
自定义服务的注入有三种方式
AddTransient,AddScoped,AddSingleton
AddTransient 瞬时,每次从服务容器进行请求实例时都会创建一个新的
AddScoped 作用域,线程单例,在同一线程请求里,只实例一次
AddSingleton 单例,全局单例,每一次获取都是同一个实例
封装服务
public class UserInfoServiceBuilder
{
IServiceCollection Services { get; set; }
public UserInfoServiceBuilder(IServiceCollection services)
{
Services = services;
}
public void UseUserInfo()
{
Services.AddSingleton<IUserInfoService, UserInfoService>();
}
public void UseUserInfo2()
{
Services.AddSingleton<IUserInfoService, UserInfoService2>();
}
}
添加扩展方法
public static class UserInfoServiceExtentions
{
public static void AddUserInfo(this IServiceCollection services,Action<UserInfoServiceBuilder> configure)
{
var builer = new UserInfoServiceBuilder(services);
configure(builer);
}
}
使用
services.AddUserInfo(configure: builer => builer.UseUserInfo());
好处
使用服务不用考虑注入服务方式
批量注入服务
https://www.cnblogs.com/Yuuuuu/p/12017180.html