IBLL接口层类库
namespace IBLL
{
public interface ICar
{
string CarName();
}
}
namespace IBLL
{
public interface IRed
{
string RedName();
}
}
BLL实现接口层类库
namespace BLL
{
public class Car : ICar
{
public string CarName()
{
return "BBA";
}
}
}
namespace BLL
{
public class Red : IRed
{
public string RedName()
{
return "红色";
}
}
}
program中利用反射批量注入文章来源:https://www.toymoban.com/news/detail-644216.html
// 获取实现接口的类库的程序集
var assembly = Assembly.Load("BLL");
//获取定义接口的类库的程序集
var assembly1 = Assembly.Load("IBLL");
// 获取所有接口类型
var interfaceTypes = assembly1.GetTypes().Where(t => t.IsInterface).ToList();
// 遍历接口类型
foreach (var interfaceType in interfaceTypes)
{
// 获取实现该接口的所有类型
var implementationTypes = assembly.GetTypes().Where(t => interfaceType.IsAssignableFrom(t) && !t.IsAbstract).ToList();
// 注册实现类型到IoC容器中
foreach (var implementationType in implementationTypes)
{
builder.Services.AddTransient(interfaceType, implementationType);
}
}
在控制器中使用构造函数传参就可以调用已经注册的所有是是实现接口的类了的实列了文章来源地址https://www.toymoban.com/news/detail-644216.html
public readonly ICar _car;
public readonly IRed _red;
public WeatherForecastController(IRed red, ICar car)
{
_red = red;
_car = car;
}
[HttpGet]
public string car()
{
return _car.CarName();
}
[HttpGet]
public string red()
{
return _red.RedName();
}
到了这里,关于asp.net core6 webapi 使用反射批量注入接口层和实现接口层的接口的类到ioc中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!