我有项目A参考项目COMMON。在项目COMMON中我有接口T. 我有另一个DLL B.B项目引用了项目COMMON。 COMMON dll位于两个文件夹中。
在项目A中,我使用Assembly.LoadFromFile加载程序集B.我需要找到所有类型实现的接口T.
var types = (from type in assembly.GetExportedTypes()
where typeof(T).IsAssignableFrom(type) select type).ToList();
我获得0大小的收藏。另外,我在Quick Watch对话框窗口中手动检查类型,如:
typeof(T) == assembly.GetExportedTypes()[0].GetInterfaces()[0]
,结果为假。
答案 0 :(得分:2)
这个表达式:
X.IsAssignableFrom(Y)
基本上问一下,你能否做到相当于:
X x = expressionOfTypeY;
在你的情况下,你问这个:
ClassType x = expressionOfInterfaceType;
这是错误的方法。
请尝试使用此LINQ查询:
where typeof(T).IsAssignableFrom(type)
答案 1 :(得分:1)
不应该是
var types = (from type in assembly.GetExportedTypes()
where typeof(T).IsAssignableFrom(type) select type).ToList();
答案 2 :(得分:0)
好的,我解决了我的问题。
我从插件文件夹中删除了common.dll,并将“Copy Local”复选为false。 我也在两个项目中使用autofac,所以对于这个DLL,我做了同样的步骤。
感谢您的回答。