asp.net core6 webapi 使用反射批量注入接口层和实现接口层的接口的类到ioc中

IBLL接口层类库

csharp 复制代码
namespace IBLL
{
    public interface ICar
    {
        string CarName();
    }
}
namespace IBLL
{
    public interface IRed
    {
        string RedName();
    }
}

BLL实现接口层类库

csharp 复制代码
namespace BLL
{
    public class Car : ICar
    {
        public string CarName()
        {
            return "BBA";
        }
    }
}
namespace BLL
{
    public class Red : IRed
    {
        public string RedName()
        {
            return "红色";
        }
    }
}

program中利用反射批量注入

csharp 复制代码
 // 获取实现接口的类库的程序集
            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);
                }
            }

在控制器中使用构造函数传参就可以调用已经注册的所有是是实现接口的类了的实列了

csharp 复制代码
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();
        }
相关推荐
精品源码屋16 分钟前
基于JAVA17的仿向日葵远程控制软件源码+最新自研完整版
后端
叉烧钵钵鸡20 分钟前
Java ++i 与 i++ 底层原理
java·开发语言·后端
JuiceFS30 分钟前
JuiceFS on Windows: 首个 Beta 版的探索与优化之路
后端·云原生·云计算
JavaGuide33 分钟前
美团OC了,给的挺多!很满意!!
后端·面试
excel1 小时前
Nuxt 3 + PWA 通知完整实现指南(Web Push)
前端·后端
R-G-B1 小时前
【09】大恒相机SDK C#开发 ——库函数 IntPtr ConvertToRGB24详细解释 及 示例
c#·大恒相机sdk·converttorgb24
用户4099322502121 小时前
BackgroundTasks 如何巧妙驾驭多任务并发?
后端·github·trae
ZLlllllll01 小时前
常见的框架漏洞(Thinkphp,spring,Shiro)
java·后端·spring·常见的框架漏洞
ZS8852 小时前
【AI】 Clickhouse MergeTree基本原理
后端
陈随易2 小时前
为VSCode扩展开发量身打造的UI库 - vscode-elements
前端·后端·程序员