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