Api Controller获得实现接口的所有类型

时间:2015-08-28 07:12:04

标签: c# asp.net-mvc-4 asp.net-web-api .net-assembly .net-reflector

我知道如何获得实现接口的所有类型,例如使用此code

但是我还没弄清楚为什么我无法在我的Asp.Net MVC ApiController中完成这项工作。我有两个项目(为命名约定道歉。我从头开始创建一个解决方案,以确保我现有的解决方案不是错误的原因):

.sln
-WebAPI
-ClassLibrary1
    -Interface1
    -Class1 : Interface1

WebApi有一个对ClassLibrary1的项目引用。

调用我的ApiController它会查看bin目录中的dll。它能够获取ClassLibrary1.dll,但当它试图查看可从Interface1分配的类型时,它找不到任何内容。

enter image description here

代码只是一个.net mvc项目和类库,并托管了here

2 个答案:

答案 0 :(得分:1)

您不需要通过其路径查找引用的程序集,您可以使用该类型来获取其程序集,如下所示:

(conj result (+ 2 x))

<强>输出:

接口1

的Class1

答案 1 :(得分:0)

问题是您已将程序集ClassLibrary1加载两次,因此引用中的ClassLibrary1.Interface1与加载的程序集中的ClassLibrary1.Interface1的接口不同。

Interface1移至自己的共享库,并在ClassLibrary1WebAPI中引用此共享库以解决您的问题。

关于Assembly.LoadFile,如果您计划制作类似系统的插件,这很好。如果您正在引用库,则不需要这样做,因为您可以枚举已加载的程序集中的类型。

在这种情况下,您可以使用:

typeof(Interface1).Assembly.GetTypes().Where(c => typeof(Interface1).IsAssignableFrom(c));

根据Bhushan Firake的建议。