.NET 依赖注入:一个接口注入多个实现类

148 阅读1分钟

背景

存在一个接口,有两个子实现类,现在需要在同一个类中注册这两个子类

接口

image.png

实现类A

image.png

实现类B

image.png

实现类注册

image.png

builder.Services.AddTransient<A>();
    builder.Services.AddTransient<B>();
    builder.Services.AddTransient(serviceProvider =>
    {
        Func<Type, IBase> accesor = key =>
        {
            if (key == typeof(A))
                return serviceProvider.GetService<A>();
            else if (key == typeof(B))
                return serviceProvider.GetService<B>();
            else
                throw new ArgumentException($"不支持的DI Key: {key}");
        };
        return accesor;
    });

依赖注入

image.png

using Microsoft.AspNetCore.Mvc;

namespace DI_1.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private readonly IBase _IA;
        private readonly IBase _IB;

        public WeatherForecastController(Func<Type,IBase> list)
        {
            _IA = list(typeof(A));
            _IB = list(typeof(B));
        }


        [HttpGet]
        public void Get()
        {
            _IA.Go();
            _IB.Go();

        }
    }
}

测试结果

image.png

参考

.Net Core DI依赖注入:一个接口注入多个实现类(转载) - PowerCoder - 博客园 (cnblogs.com)