iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C# 反射与 Quartz 实现流程处理详情
  • 454
分享到

C# 反射与 Quartz 实现流程处理详情

2024-04-02 19:04:59 454人浏览 八月长安
摘要

目录1、实现2、创建实例,并执行方法1、实现 这里主要用的是反射的方法。用户要传入方法名和方法参数,我们就需要先写函数返回这些信息,最后再包装一下返回给用户。 获取某一程序集下所有类

1、实现

这里主要用的是反射的方法。用户要传入方法名和方法参数,我们就需要先写函数返回这些信息,最后再包装一下返回给用户。

获取某一程序集下所有类:(对我来说,获取当前程序集下的类就够了,要获取其他程序集或dll的,请查询其他资料)


public List<string> GetClass(string assembyName = null)
{
     Assembly asm = Assembly.GetExecutingAssembly();
     var allclass = asm.ExportedTypes.ToList();
     return allclass.Select(u => u.Name).ToList();
}


获取某一个类中所有的方法,主要用到GetMethods()的方法:


public List<string> GetMethod(Type type,string assembyName = null)
        {
              // 测试获取指定类的方法,去除自带的GetType方法
              List<MethodInfo> methods = type.GetMethods().Where(u=>u.IsVirtual == false)
                  .Where(u => !u.Name.Contains("GetType")).ToList();
              return methods.Select(u => u.Name).ToList();
        }


获取某一个方法的传入参数类型,我是通过把method直接tostring(),来解析出输入类的名称的,应该有其他方法可以拿到输入类的名称:


public List<string> GetParameter(MethodInfo methodInfo, Assembly assembly)
        {
            // 由方法获取输入类,创建类
            var method_FullName = methodInfo.ToString();
            // 方法中找不到input类的信息,只能从fullname中解析出来
            Regex reg = new Regex(@"(?is)(?<=\()(.*)(?=\))");
            Match m = reg.Match(method_FullName);
            string inputName = m.Value.Split(".").Last();
            Type input_class = assembly.ExportedTypes.Where(u => u.Name.Contains(inputName)).First();
            PropertyInfo[] propertyInfos = input_class.GetProperties();
            List<string> result = new List<string>();
            foreach ( var item in propertyInfos )
            {
                var returnType = item.GetGetMethod().ReturnType;
                var name = returnType.ToString();
                result.Add(name);
            }
            return result;
        }


可以获取输入类的属性类型。

2、创建实例,并执行方法

如果是用放射的方式实例化类,很麻烦的是类的构造函数中存在依赖关系。于是我才用依赖注入中获取类的方法。

首先,创建一个IServiceProvider的静态类来获取系统依赖注入中的所有服务,再main函数中进行获取和赋值:


public static class ServiceHelper
    {
        public static IServiceProvider Instance { get; set; }

    }

main中获取依赖注入:


public static void Main(string[] args)
        {
            var WEBhost = CreateHostBuilder(args).Build();
            using ( var scope = webhost.Services.CreateScope() )
            {
                ServiceHelper.Instance = webhost.Services;
            }

            webhost.Run();
        }

这样,就可以避免依赖关系,直接拿依赖注入中的类来反射方法,并执行:


    // 获取依赖注入中类
     var api = ServiceHelper.Instance.GetService(do_class);    


这里的do_class是一个Type

最后,是使用invoke来执行方法:


PropertyInfo[] propertyInfos = input_class.GetProperties();
Object Args = asm.CreateInstance(input_class.FullName);

 foreach ( var item in propertyInfos )
            {
                  var returnType = item.GetGetMethod().ReturnType;
                  var name = returnType.ToString();
                  // 匹配类型
                  if ( name.ToLower().Contains("string") )
                  {
                      item.SetValue(Args, "test");
                  }
                  else if ( name.ToLower().Contains("int") )
                  {
                      item.SetValue(Args, 1);
                  }
            }    

// 模拟某方法进行执行
object[] inputArgs = new object[] { Args };
try
{
    var result = method.Invoke(api, inputArgs);
 }
 catch ( Exception ex)
 {
     Console.WriteLine(ex.Message);
 }

这里的Args是通过input类获取的参数类型而设置的实例对象,由于invoke的参数类型为objetc[],所以需要再包装一层。

method是要调用的方法,api是该类的实例,从依赖注入中获取。

总结

最后就是Quartz的配合,这里就不写了,可以通过JobDataMap来传递参数。再结合Http client,可以实现基本流程处理。既可以调用内部函数,也可以http调用接口。

到此这篇关于C# 反射与 Quartz 实现流程处理详情的文章就介绍到这了,更多相关C# 反射与 Quartz 实现流程处理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C# 反射与 Quartz 实现流程处理详情

本文链接: https://www.lsjlt.com/news/135877.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C# 反射与 Quartz 实现流程处理详情
    目录1、实现2、创建实例,并执行方法1、实现 这里主要用的是反射的方法。用户要传入方法名和方法参数,我们就需要先写函数返回这些信息,最后再包装一下返回给用户。 获取某一程序集下所有类...
    99+
    2024-04-02
  • Java方法反射实现原理详解
    博主说:Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制。在本文中,占小狼分析了 J...
    99+
    2023-05-31
    java 方法反射 ava
  • C++ 情怀游戏扫雷的实现流程详解
    扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏。 不久,“方块”被改写成了游戏“Rlogic”。在“Rlogic”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一...
    99+
    2024-04-02
  • C++ 情怀游戏贪吃蛇的实现流程详解
    还记我们童年时的贪吃蛇吗,用“砖头”诺基亚玩的更是经典中的经典,贪食蛇操作简单,可玩性比较高。这个游戏难度最大的不是蛇长得很长的时候,而是开始。那个时候蛇身很短,看上去难度不大,却最...
    99+
    2024-04-02
  • C语言中的程序环境与预处理详情
    目录1.程序的翻译环境和执行环境2.详解编译和链接2.1程序翻译环境下的编译和链接2.2深入编译和链接过程2.3运行环境3.预处理详解3.1预定义符号3.2#define3.2.1#...
    99+
    2024-04-02
  • SpringBoot日程管理Quartz与定时任务Task实现详解
    目录1 Quartz核⼼概念Springboot整合Quartz1.导⼊springboot整合Quartz的starter2.定义任务Bean3.创建Quartz配置类2. Tas...
    99+
    2024-04-02
  • 详解如何利用C++实现一个反射类
    目录正题开始Singleton.h反射类Reflex.h代码环境为VScode + CMake + GCC 8.1.0 首先,如何才能做到给我一个名字我就能拿到这个对象的这个值,也是...
    99+
    2023-03-09
    C++实现反射类 C++反射类
  • 利用Golang反射实现动态类型处理
    反射是 go 的一项功能,用于在运行时检查和修改类型,可用于动态类型处理。具体步骤包括:获取类型对象(reflect.type)、获取类型信息(名称、种类)、获取值反射值(reflect...
    99+
    2024-04-03
    golang
  • SpringBoot响应处理实现流程详解
    目录1、相关依赖2、ReturnValueHandlers—返回值处理器3、HttpMessageConvert—消息转换器4、开启浏览器参数方式内容协商功能...
    99+
    2024-04-02
  • Flutter+Metal实现图像处理详细流程
    背景 在之前自制的图像处理App中,使用了OpenGL处理图片,这次使用Metal替代OpenGL,来达到更好的性能,顺便熟悉一下Metal的渲染流程 基本思路 Flutter使用...
    99+
    2024-04-02
  • python超详细实现字体反爬流程
    目录查策实战场景字体实战解码字体反爬编码时间查策实战场景 本次要采集的目标站点是查策,该测试站点如下所示。 目标站点网址如下 www.chacewang.com/chanye/ne...
    99+
    2024-04-02
  • python sklearn与pandas实现缺失值数据预处理流程详解
    注:代码用 jupyter notebook跑的,分割线线上为代码,分割线下为运行结果 1.导入库生成缺失值 通过pandas生成一个6行4列的矩阵,列名分别为'col1&#...
    99+
    2024-04-02
  • java反射之Method的invoke方法实现教程详解
    反射是Java语言的一种特性,它可以在运行时动态地获取类的信息并操作类的成员。Method类是反射机制中用于表示方法的类,在Meth...
    99+
    2023-08-17
    Java
  • C语言与C++动态通讯录超详细实现流程
    目录1、思路以及要实现的功能2、详细步骤2.1 打印菜单界面(建一个源文件test.c)2.2 主函数2.3 初始化函数与加载函数2.4 增加联系人函数AddContact2.5 删...
    99+
    2024-04-02
  • C++内存泄漏的检测与实现详细流程
    目录内存泄漏带来的问题难点hook实现泄漏判断与追踪(malloc和free重载)宏定义实现hook内存泄漏 malloc/new 调用在堆上分配的内存却没有相应的free/dele...
    99+
    2022-11-13
    C++ 内存泄漏检测 C++ 内存泄漏实现
  • C++模拟实现vector流程详解
    目录模拟vector总结模拟vector 我们可以通过模板实现类似vector的类。我们实现一个StrVecTemp类,其内部通过allocator开辟空间,存储的类型用T来表示,T...
    99+
    2022-11-13
    C++ vector容器 C++ vector
  • C++编程语言实现单链表详情
    目录一、单链表简单介绍二、下面我们先实现单链表的初始化。 三、实现单链表的插入与删除数据一、单链表简单介绍 首先,我们再回顾一下线性表的两种存储方式——顺序存储与链式存储 上图左边...
    99+
    2024-04-02
  • C++详细实现红黑树流程详解
    目录红黑树的概念红黑树的性质红黑树的定义与树结构插入新增结点插入后维护红黑树性质的主逻辑旋转验证红黑树与AVl树的比较红黑树的应用红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点...
    99+
    2024-04-02
  • Java 实现限流器处理Rest接口请求详解流程
    Maven依赖 <dependency> <groupId>com.google.guava</groupI...
    99+
    2024-04-02
  • vue与electron实现进程间的通信详情
    目录一、配置内容1.进程间的通信第一种方式引入ipcRenderer第二种方式引入ipcRenderer2.渲染进程常用配置3.将ipcMain封装到一个js中统一处理三、总结前言:...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作