Asp.net Core 中一键注入接口

Asp.net Core 中一键注入接口

前言

在之前开发Asp.Net Core程序时遇到接口需要一个一个的注入到Services中,当有非常多的接口需要注入时会显得代码成为了一座山,这里记录一下如何通过接口的命名一键自动注入.

准备

IDE: Visual studio 2022
.Net版本:.Net 8

开始

首先是接口的命名需要规范,列如接口命名为TestDao,实现类命名为TestDaoImpl,这里就以DaoDaoImpl来做示范.
新建一个类,命名为ServiceCollectionExtensions,内容如下:

        public static IServiceCollection AddDaosWithConvention(this IServiceCollection services, Assembly assembly)
        {
            var interfaceSuffix = "Dao"; // 接口命名结尾
            var implementationSuffix = "DaoImpl";// 实现类命名结尾
			
			// 通过反射的机制来寻找所有的接口命名符合interfaceSuffix 结尾的
            var interfaceTypes = assembly.GetTypes()
                                         .Where(t => t.IsInterface && t.Name.EndsWith(interfaceSuffix))
                                         .ToArray();
			// 通过反射的机制来寻找所有的实现类命名符合interfaceSuffix 结尾的
            var types = assembly.GetTypes()
                                .Where(t => t.IsClass && !t.IsAbstract && t.Name.EndsWith(implementationSuffix))
                                .ToList();
			
			// 使用AddScoped注入所有符合的接口与实现类
            foreach (var interfaceType in interfaceTypes)
            {
                foreach (var type in types)
                {
                    var interfaceName = type.GetInterfaces()
                                            .FirstOrDefault(i => i.Name == interfaceType.Name)
                                            ?.Name;

                    if (interfaceName != null)
                    {
                        services.AddScoped(interfaceType, type);
                    }
                }
            }

            return services;
        }

使用

Program.cs文件中添加:

builder.Services.AddDaosWithConvention(Assembly.GetExecutingAssembly());

当上述配置完成后,在创建完接口与实现类后可以直接引用,不需要再去注册.

相关推荐

  1. Asp.net Core 注入接口

    2024-03-30 00:24:03       42 阅读
  2. 接口设计】注册登录接口开发设计注意细节

    2024-03-30 00:24:03       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 00:24:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 00:24:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 00:24:03       87 阅读
  4. Python语言-面向对象

    2024-03-30 00:24:03       96 阅读

热门阅读

  1. .NET Core教程:入门与实践实例

    2024-03-30 00:24:03       36 阅读
  2. 五、常见古典加解密

    2024-03-30 00:24:03       40 阅读
  3. vue3 hooks之事件广播(支持跨标签页)

    2024-03-30 00:24:03       36 阅读
  4. 监控运维工程师/阿里acp

    2024-03-30 00:24:03       43 阅读
  5. YOLOv5-小知识记录(二)

    2024-03-30 00:24:03       46 阅读
  6. 数据链路层(四):数据链路层协议

    2024-03-30 00:24:03       44 阅读
  7. C# 异步与 Unity 协程(实例讲解)

    2024-03-30 00:24:03       43 阅读
  8. math模块篇(五)

    2024-03-30 00:24:03       34 阅读