背景
存在一个接口,有两个子实现类,现在需要在同一个类中注册这两个子类
接口
实现类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)