• Asp.Net Core 扩展IOC注入Attribute


    IOC批量注入再Core框架中还是比较麻烦的,因此写了一个简单的IOC注入通过属性标注服务,再通过service自带的注册服务,扩展了三个注入服务,分别为
    AddTransientList/AddScopedList/AddSingletonList 下面直接上代码

    ServiceInjectExtensions类

        public static class ServiceInjectExtensions
        {
            public static void AddTransientList(this IServiceCollection services, System.Reflection.Assembly assembly)
            {
                if (services == null)
                {
                    throw new ArgumentNullException(nameof(services));
                }
                foreach (Type item in assembly.GetTypes())
                {
                    if (item.GetCustomAttributes(typeof(Transient)).Count() > 0)
                    {
                        if (!item.IsInterface)
                        {
                            services.AddTransient(item.GetInterfaces()[0], item);
                        }
                    }
                }
            }
    
            public static void AddScopedList(this IServiceCollection services, System.Reflection.Assembly assembly)
            {
                if (services == null)
                {
                    throw new ArgumentNullException(nameof(services));
                }
                foreach (Type item in assembly.GetTypes())
                {
                    if (item.GetCustomAttributes(typeof(Scoped)).Count() > 0)
                    {
                        if (!item.IsInterface)
                        {
                            services.AddTransient(item.GetInterfaces()[0], item);
                        }
                    }
                }
            }
    
            public static void AddSingletonList(this IServiceCollection services, System.Reflection.Assembly assembly)
            {
                if (services == null)
                {
                    throw new ArgumentNullException(nameof(services));
                }
                foreach (Type item in assembly.GetTypes())
                {
                    if (item.GetCustomAttributes(typeof(Singleton)).Count() > 0)
                    {
                        if (!item.IsInterface)
                        {
                            services.AddTransient(item.GetInterfaces()[0], item);
                        }
                    }
                }
            }
        }
    

    自定义属性

      public class Transient : Attribute
        {
        }
    
        public class Singleton : Attribute
        {
        }
    
        public class Scoped : Attribute
        {
        }
    

    再startup类调用服务

      services.AddTransientList(Assembly.GetExecutingAssembly());
      services.AddScopedList(Assembly.GetExecutingAssembly());
      services.AddSingletonList(Assembly.GetExecutingAssembly());
    

    标注服务

        [ExtensionsInject.Transient()]
        public class TestServices : ItestRepository
        {
            public string test()
            {
                return "张三";
            }
        }
    

    再控制器中使用即可,有很多种注入方式,我比较喜欢的这种方式

  • 相关阅读:
    java注解,通过反射解析注解,模仿hibernate,获取sql语句。
    Eclipse/Myeclipse中查看和调试JDK源代码的方法
    TCP为什么会出现 RST
    《浅谈F5健康检查常用的几种方式》—那些你应该知道的知识(二)
    负载均衡服务TCP端口健康检查成功,为什么在后端业务日志中出现网络连接异常信息?
    haproxy的丰富特性简介
    健康检查概述
    firewall防火墙常用操作
    gitlab修改默认端口
    vim脚本判断操作系统
  • 原文地址:https://www.cnblogs.com/SuperDust/p/13174134.html
Copyright © 2020-2023  润新知