【.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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GreAmbWang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值