C# Assembly 反射动态加载程序集(动态加载Dll)Demo

news2024/11/17 9:46:01

No1、本Demo 定义了一个接口IserviceToolFrame,接口中有一个方法Run。
No2、在另外两个工程中,分别定义两个类serviceToolCatComplete、serviceToolDogComplete实现接口IserviceToolFrame。
No3、控制台程序通过动态加载Dll的方式去调用IserviceToolFrame的实例,输出不同的内容。代码如下:

动态加载Dll方法

public void Main()
        {
            Console.WriteLine($"框架启动");
            Dictionary<string, string> AllDll = new Dictionary<string, string>();
            AllDll.Add("serviceToolCat.serviceToolCatComplete", "E:\\work\\codes\\1NetCore\\serviceTool\\serviceToolTest\\complete\\serviceToolCat\\bin\\Debug\\net6.0\\serviceToolCat.dll");
            AllDll.Add("serviceToolDog.serviceToolDogComplete", "E:\\work\\codes\\1NetCore\\serviceTool\\serviceToolTest\\complete\\serviceToolDog\\bin\\Debug\\net6.0\\serviceToolDog.dll");

            //实现方式一
            foreach (var d in AllDll)
            {
                Task.Run(() =>
                {
                    System.Reflection.Assembly assembly = Assembly.LoadFile(d.Value);
                    IServiceToolDo itool = assembly.CreateInstance(d.Key) as IServiceToolDo;
                    itool.Run();
                });
            }

            //实现方式二
            foreach (var d in AllDll)
            {
                Task.Run(() =>
                {
                    System.Reflection.Assembly assembly = Assembly.LoadFile(d.Value);
                    foreach (var t in assembly.GetTypes())
                    {
                        Console.WriteLine(t.Name);
                        MethodInfo m = t.GetMethod("Run");
                        Console.WriteLine(m.Name);
                        m.Invoke(assembly.CreateInstance(d.Key), null);
                    }

                });
            }
        }

输出效果如图:
在这里插入图片描述
接口定义

namespace serviceToolFrame
{
    public interface IServiceToolDo
    {
        public void Run() { Console.WriteLine("接口未能实现"); }
    }
}

Dog类实现

 public class serviceToolDogComplete : IServiceToolDo
    {
        public void Run()
        {
            while (true)
            {
                Console.WriteLine($"{DateTime.Now} {Environment.NewLine} Dog Dog .......");
                System.Threading.Thread.Sleep(5000);
            }
        }
    }

Cat类实现

public class serviceToolCatComplete: IServiceToolDo
    {
        public void Run()
        {
            while (true)
            {
                Console.WriteLine($"{DateTime.Now} {Environment.NewLine} Cat Cat .......");
                System.Threading.Thread.Sleep(15000);
            }
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/797781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

消息队列的两种消费模式

第一种&#xff1a;点对点模式 消息发送者生产消息发送到消息队列中&#xff0c;然后消息接收者从消息队列中取出并且消费消息。消息被消费以后&#xff0c;消息队列中不再有存储&#xff0c;所以消息接收者不可能消费到已经被消费的消息。 点对点模式特点&#xff1a; 每个消息…

git的clone,上传与upstream同步

文章目录 clone同步 clone clone他人项目&#xff0c;git到自己的项目 rm -rf .git .git存放原始项目的日志信息&#xff0c;这里需要添加自己的日志信息&#xff0c;需要删除重写。也可手动删除 git init 初始化文件&#xff0c;依据本地日志信息生产.git文件 git add 目标文…

生物信息学_玉泉路_课堂笔记_03 第三章 多序列比对与系统发生树构建

&#x1f345; 课程&#xff1a;生物信息学_玉泉路_课堂笔记 中科院_2022秋季课 第一学期 &#x1f345; 个人笔记使用 &#x1f345; 2023/7/6 一、多序列比对简介 1.1 简介 1.2 多序列比对方法 1.2.1 启发式&#xff1a;渐进法 1.2.2 软件 ClustalW/X 1.2.3 启发式&…

安装git创建版本库

安装git 安装教程参考链接 https://blog.csdn.net/mukes/article/details/115693833 按照链接流程安装 安装完成后&#xff0c;还需要最后一步设置&#xff0c;在命令行输入&#xff1a; &#xff08;用户名和邮箱在账号中查找&#xff09; $ git config --global user.name “…

一套Java/.Net+Vue前后端分离的低代码快速开发框架

项目简介 这是一个基于Java Boot/.Net Core构建的简单、跨平台快速开发框架。前后端封装了上千个常用类&#xff0c;方便扩展&#xff1b;集成了代码生成器&#xff0c;支持前后端业务代码生成&#xff0c;实现快速开发&#xff0c;提升工作效率&#xff1b;框架集成了表单、报…

特定Adreno GPU的Android设备发生冻屏问题

1&#xff09;特定Adreno GPU的Android设备发生冻屏问题 ​2&#xff09;Unity版本升级后&#xff0c;iOS加载UnityFramework bundle闪退 3&#xff09;关于RectTransfrom.rect在屏幕空间中表示的相关问题 4&#xff09;Unity Mesh泄露问题 这是第345篇UWA技术知识分享的推送&a…

flex布局篇——justify-cont:center/space-between/space-around最后一行靠左

正常来说,用到 justify-cont:space-between时,最后一行元素是这样的 会向两端对齐。为了解决这个办法,可用gap与伪类进行纠正: <view class="box"><view class="bbox" wx:for="{{50}}" wx:key="this"><view class=…

CitHub Copilot 基于GPT的代码生成模型

CitHub Copilot 基于GPT的代码生成模型 介绍 GitHub Copilot X 是 GitHub 与 OpenAI 合作创建的&#xff0c;这是世界上第一个使用 OpenAI Codex 模型开发的大规模生成式人工智能开发工具&#xff0c;可以作为vscode 和jetbrains 插件安装 价格 试用30天免费&#xff0c;10…

3分钟学会设计模式 -- 单例模式

►单例模式 ►使用场景 在编写软件时&#xff0c;对于某些类来说&#xff0c;只有一个实例很重要。例如&#xff0c;一个系统中可以存在多个打印任务&#xff0c;但是只能有一个正在工作的任务&#xff1b;一个系统中可以多次查询数据库&#xff0c;但是只需要一个连接&#x…

rancher平台上强制删除pod服务操作

背景&#xff1a; 在日常paas平台运维工作中需要对rancher平台进行巡检的工作&#xff0c;在巡检时发现在rancher管理界面无法删除异常的pod服务&#xff0c; 处理&#xff1a; 像这样的情况就是k8s集群的pod无法通过默认的方式去删除掉pod服务&#xff0c;这时候只能是手工强制…

24岁女神 上位机还是前端?何去何从?

首先&#xff0c;我要澄清一点&#xff0c;无论是上位机开发还是前端开发&#xff0c;性别并不应该是决定因素&#xff0c;而是应该根据个人的兴趣、能力和适应性来选择职业方向。在工控行业和物联网行业&#xff0c;上位机开发确实有一定的需求。由于上位机开发更注重逻辑和抽…

前端特效必备!打造酷炫马赛克和灰色滤镜,让你的图片变得与众不同!

一、引言 引言&#xff1a; 在现代前端开发中&#xff0c;图像处理是一个不可忽视的重要环节。本篇博客将带您领略前端图像处理的魅力&#xff0c;通过Canvas和算法实现几个炫酷特效&#xff1a;马赛克和灰色滤镜、模糊等。让我们一起给图片增添马赛克的神秘感和灰色滤镜的怀旧…

BMapGL -- 生成多个maker,获取指定标识的maker,并清除他们

需求描述: 在使用 Baidu Map JavaScript API 创建多个标记时,可以为每个标记设置一个唯一的标识符(identifier),以便在以后可以根据标识符获取特定的标记,并清除它们。 代码: // 创建地图实例 var map = new BMapGL.Map("container");// 创建标记1 var poin…

与传统透明屏相比,BOE透明屏有哪些特点优势?

BOE透明屏是一种新型的显示技术&#xff0c;它能够实现透明度高达90%以上的显示效果。这种屏幕可以应用于各种领域&#xff0c;如商业展示、智能家居、汽车行业等&#xff0c;具有广阔的市场前景。 BOE透明屏采用了先进的光学技术&#xff0c;通过控制光的传播和折射&#xff…

python核心-面向对象-python对象的生命周期,以及周期方法

监听对象的生命周期 # -----------------------------几个监听对象生命周期的方法---------------------- # class Person: # # def __new__(cls, *args, **kwargs): # # print("新建一个对象&#xff0c;但是被我拦截了") # def __init__(self): # …

Spring-ApplictionContext

Spring Spring是整个Java体系最核心的框架&#xff0c;没有之一。 核心类图结构 ApplicationContext ApplicationEventPublisher&#xff1a;提供了一种机制&#xff0c;用于通知应用程序中感兴趣的部分有关其执行过程中发生的特定事件。ListableBeanFactory&#xff1a;是S…

vue新学习 02 vue命令v-model,数据代理,事件,监听,渲染

双向绑定用命令v-model&#xff1a; v-bind的命令是单项去绑定data中的相关属性&#xff0c;此时的data是真正的data&#xff0c;并没有用变量声明的方式去接收vue实例对象&#xff0c;也就是例如用const vm new Vue({})。而是直接就采用了new Vue&#xff08;{}&#xff09;这…

【DP】The 2022 ICPC Asia Regionals Online Contest (II) B Non-decreasing Array

PTA | 程序设计类实验辅助教学平台 题意&#xff1a; 给定一个不下降的序列&#xff0c;每次操作有两步&#xff1a; 1.选择2~N的一个数&#xff0c;删除这个数 2.选择2~N的一个数&#xff0c;改变这个数为任意值 要满足该数列不下降&#xff0c;N-2次询问&#xff0c;问操…

《玉骨遥》:腾讯视频定义古偶叙事及格线

&#xff08;图片来源于网络&#xff0c;侵删&#xff09; 文 | 螳螂观察 作者 | 郭襄 拿着自带话题与流量的古偶仙侠剧《玉骨遥》&#xff0c;腾讯视频着实做了一回暑期档的“显眼包”。 对于长视频平台来说&#xff0c;暑期档是兵家必争之地。但在一众竞争者中&#xff0…