C# 获取DLL中需要的接口类

[ 需求 ]

使用反射,循环本地DLL文件,获取实现了所需接口的类,并实例化。

Loop local dll files by reflection library and assembly library to find all the classes that implement certain interface and create instances for them.

二话不说,先上代码。

Talk is cheap. Show me the code.

 1 using System;
 2 using System.Collections.Generic;
 3 using System.IO;
 4 using System.Linq;
 5 using System.Reflection;
 6
 7 namespace InterfaceClassLoader
 8 {
 9     public class Loader
10     {
11
12         private List<IMyInterface> myInstanceList;
13         private void Initialize()
14         {
15
16             try
17             {
18                 var type= typeof(IMyInterface);
19                 myInstanceList= GetAllAssemblies().
20                     SelectMany(a => a.GetTypes()).
21                     Where(t => !t.IsInterface && type.IsAssignableFrom(t)).
22                     Select(t => (IMyInterface)Activator.CreateInstance(t)).ToList();
23             }
24             catch (Exception ex)
25             {}
26         }
27
28
29         private List<Assembly> GetAllAssemblies()
30         {
31             var folderPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
32             var allAssemblies = new List<Assembly>();
33             Directory.GetFiles(folderPath,"*.dll").ToList().ForEach(f =>
34             {
35                 allAssemblies.Add(Assembly.LoadFile(f));
36             });
37
38
39             var filteredAssembly = allAssemblies.FindAll(a => a.FullName.Contains("MyMark"));
40             return filteredAssembly;
41         }
42
43     }
44
45 }

原文地址:https://www.cnblogs.com/jiceberg420/p/11044688.html

时间: 2024-10-09 13:40:52

C# 获取DLL中需要的接口类的相关文章

C#获取C# DLL中的指定接口的所有实现实例 - qq_19759475的博客 - CSDN博客

原文:C#获取C# DLL中的指定接口的所有实现实例 - qq_19759475的博客 - CSDN博客 public static List<T> CreateTarInterface<T>(string dllpath) { List<T> rs = new List<T>(); var dlllll = Assembly.Load(dllpath); foreach (var item in dlllll.GetTypes()) { object ob

获取DLL中的方法名称

  OpenFileDialog obj = new OpenFileDialog(); if (obj.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Assembly ass = Assembly.LoadFrom(obj.FileName); foreach(var type in ass.GetTypes()) { MethodInfo[] members = type.GetMethods(BindingFlags.Pub

[转]从普通DLL中导出C++类 – dllexport和dllimport的使用方法(中英对照、附注解)

这几天写几个小程序练手,在准备将一个类导出时,发现还真不知道如果不用MFC的扩展DLL,是怎么导出的.但我知道dllexport可以导出函数和变量,而且MFC扩展DLL就算是使用了MFC的功能,但能否导出类应该也不是必须用MFC才能够做到,一定是有相应的机制可以实现.于是查了一下MSDN,发现这个机制简单的可怕,原来就和导出函数一样,把dllexport关键字加到类名前就可以了.估计和我一样的同学大有人在,把MSDN的相关文档翻译出来,附上我的注解,希望对大家有用. 评注程序均在Visual S

从普通DLL中导出C++类 &lt;一&gt;

Microsoft Specific You can declare C++ classes with the dllimport or dllexport attribute. These forms imply that the entire class is imported or exported. Classes exported this way are called exportable classes.The following example defines an export

如何在MFC DLL中向C#类发送消息

如何在MFC DLL中向C#类发送消息 一. 引言 由于Windows Message才是Windows平台的通用数据流通格式,故在跨语言传输数据时,Message是一个不错的选择,本文档将描述如何在MFC DLL中向C#窗口类发送消息. 二. 实现过程 1. 新建一个基于MFC的DLL工程,在工程作用是用于生成Dll库函数: 2. 在该工程中新增一个类,CMessager: 3. 在头文件中添加代码如下: 1 #define ZS_API extern "C" _declspec (

转:DLL如何导出C++的类

由于DLL的出现是针对C语言的,本身对C++的支持不够好.所以如何从DLL中导出C++的类作为DLL的API的一部分就成了问题. 我试了一下 class __declspec(dllexport) Foo这种做法是可行的.并且DEF文件不支持导出C++类(https://msdn.microsoft.com/en-us/library/d91k01sh.aspx:https://msdn.microsoft.com/en-us/library/hyx1zcd3.aspx).感觉还有很多不清楚,所

抽象类接口类

抽象类和接口类做的事情:建立规范 制定一个类的metaclass是ABCMeta那么这个类就编程了一个抽象类(接口类)这个类的功能就是建立一个规范类  让它里面的规范都有一样的方法或者属性 抽象类中所有被abstractmethod装饰的方法都必须被继承的字类实现 如果不实现 那么在实例化阶段就会报错 无论是抽象类还是接口类metaclass = ABCMeta 都不可以被实例化 from abc import ABCMeta, abstractmethod class Payment(meta

C++:如何正确的定义一个接口类

C++中如何定义接口类?首先给接口类下了定义:接口类应该是只提供方法声明,而自身不提供方法定义的抽象类.接口类自身不能实例化,接口类的方法定义/实现只能由接口类的子类来完成. 而对于C++,其接口类一般具有以下特征: 1.最好不要有成员变量,但可以有静态常量(static const或enum)2.要有纯虚接口方法3.要有虚析构函数,并提供默认实现4.不要声明构造函数 如下就是一个最简单的例子: class Testable{public: static const int START = 1;

初识面向对象-接口类、抽象类、封装

接口类 # java : 面向对象编程# 设计模式 —— 接口# 接口类 : python原生不支持# 抽象类 : python原生支持的from abc import abstractmethod,ABCMetaclass Payment(metaclass=ABCMeta): # 元类 默认的元类 type @abstractmethod def pay(self,money):pass # 没有实现这个方法# 规范 :接口类或者抽象类都可以# 接口类 支持多继承,接口类中的所有的方法都必须