Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何编写允许插件的应用程序?_C#_Plugins_Add In - Fatal编程技术网

C# 如何编写允许插件的应用程序?

C# 如何编写允许插件的应用程序?,c#,plugins,add-in,C#,Plugins,Add In,我可以发誓有几本关于这方面的教程,但我似乎找不到,也不记得我过去是怎么做的(几年了,在另一家公司) 我将在C#工作。我想我所做的是为应用程序和插件创建一个具有必要属性/方法的接口,以便进行来回通信 运行应用程序,扫描文件夹中的插件,加载插件并通过前面提到的界面与之交互 如果以上内容正确,有人能给我举一个加载插件的例子或者更好的例子,一个教程吗 谢谢 可能值得一看托管扩展性框架: 有很多方法,但很简单: 扫描文件夹: string[] files = System.IO.Directory.Get

我可以发誓有几本关于这方面的教程,但我似乎找不到,也不记得我过去是怎么做的(几年了,在另一家公司)

我将在C#工作。我想我所做的是为应用程序和插件创建一个具有必要属性/方法的接口,以便进行来回通信

运行应用程序,扫描文件夹中的插件,加载插件并通过前面提到的界面与之交互

如果以上内容正确,有人能给我举一个加载插件的例子或者更好的例子,一个教程吗


谢谢

可能值得一看托管扩展性框架:


有很多方法,但很简单:

扫描文件夹:

string[] files = System.IO.Directory.GetFiles("yourpath", "*.dll");
然后加载程序集(对于上面的每个文件)

从程序集到枚举类型:

Type[] types = assembly.GetTypes();
检查类型是否实现了您的接口

Type t;
YourInterface.IsAssignableFrom(t);
然后实例化:

object o = Activator.CreateInstance(t);
YourInterface iface = (YourInterface)o;
就这样,异常处理和其他部分当然被省略了


一些DI软件包可以为您做很多这方面的工作,这取决于您的用例,它们可能非常有用,也可能是多余的。

以下是示例:我同意spender的观点,您应该看看MEF。看看导出元数据功能,它可以用来发现插件,而无需实际激活插件。谢谢!正是我要找的!
object o = Activator.CreateInstance(t);
YourInterface iface = (YourInterface)o;