要判断类型,对于类型变量,就是写if(typeof(PluginB).IsAssignableFrom(x))
对于对象,就是写if(x is PluginB)
对于对象,就是写if(x is PluginB)
解决方案 »
- GDAL c# 加载图像
- 急求解决DES加密的问题。用的是ECB模式。
- C# panel控件显示问题
- 网页中的播放器如何动态设置路径
- 请问一下,怎么样动太生成水晶报表啊?
- ★★★字符转换为Base64的问题★★★
- C#中FolderBrowserDialog fbd = new FolderBrowserDialog();下如何解决新建文件夹重命名并保存文件的问题!急!
- 请问,怎样模拟 键盘上的 "Win"(Ctrl旁边的)键的单击事件和与其组合的键的单击事件
- 答题的技巧:如何回答才能获得最高分
- 请问一个c#控件一般包哪几种文件?down下的控件怎么安装,请具体点?
- c#的一个控制台程序能不能生成三个不同功能的exe程序呢?
- 求助:如何封装C++的中的回调函数供C#调用
这样的话,与我要的目的是相违背的,如果这时又动态加载进来了个PluginD,我想得到PluginD的实例,不是还得改程序了?我目前的想法是,是否能传一个类名参数过来,就能实例化相应类的实例,比如IPlugin plu=GetService("PluginB")这样子
我现在是已经自动创建好了对象,导入到了一个IEnumerable<IPlugin>对象,现在这个对象里有A,B,C三个对象了,就是不知道通过什么方式得到我想要的B对象,我想我的代码是这个样子的,IPlugin plu=GetService("PluginB")
看不懂你写的是什么意思?!MEF是自动搜索到所有符合某接口的实现。例如你有一个“照相机”接口,那么你直接可以得到进程中所有(后期链接并且加载的)符合这个接口的对象。比如说有20种照相机,其中许多甚至是从其它磁盘目录下的exe、dll文件被发现出来的。你的程序可以自动得到这20种照相机的对象实例集合,或者这20种照相机各自的类型集合。至于说你需要“佳能、长焦”照相机,那是你的程序自己去遍历、去筛选的事情。跟MEF无关。MEF负责帮你收集当前磁盘目录、系统目录、其它任意指定目录下的可以被反射出来的相关的对象(或者类型)。它的目的是给你提供一个方便“遍历”的接口,至于说你需要再从结果中去挑出一个出来,那跟MEF无关。
你想挑一个出来,可以写(假设你的“IEnumerable<IPlugin>对象”使用变量container表示)PluginB plu = (PluginB) container.FirstOrDefault(x=> x is PluginB);
if(plu != null)
{
.......但是,如果你需要一个PluginB,你为什么不用 MEF 来帮你直接自动收集 IEnumerable<PluginB>对象呢?
你想挑一个出来,可以写(假设你的“IEnumerable<IPlugin>对象”使用变量container表示)PluginB plu = (PluginB) container.FirstOrDefault(x=> x is PluginB);
if(plu != null)
{
.......但是,如果你需要一个PluginB,你为什么不用 MEF 来帮你直接自动收集 IEnumerable<PluginB>对象呢?我不能直接使用PluginB类来做操作的,不然的话我还要引用PluginB类,我只想通过类名字符串或是一些别的信息告诉container,我要取他中间的哪一个来实例化我的IPlugin对象