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中利用反射批量注入
// 获取实现接口的类库的程序集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);}}
在控制器中使用构造函数传参就可以调用已经注册的所有是是实现接口的类了的实列了
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();}