【.NET Core】依赖注入,服务注入

目录

注入服务到容器

注入自定义服务

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

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页