背景
存在一个接口,有两个子实现类,现在需要在同一个类中注册这两个子类
接口
实现类A
实现类B
实现类注册
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; });
依赖注入
``` 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();
}
}
} ```
测试结果
参考
.Net Core DI依赖注入:一个接口注入多个实现类(转载) - PowerCoder - 博客园 (cnblogs.com)