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

但是我还没有弄清楚为什么不能在Asp.Net MVC ApiController中使此工作正常进行。我有两个项目(对命名约定表示歉意。我从头开始创建了一个解决方案,只是为了确保现有的不是导致错误的原因):

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


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

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

c# - Api Controller获取实现接口(interface)的所有类型-LMLPHP

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

最佳答案

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

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

关于Assembly.LoadFile,如果您打算制作类似system的插件,这很好。如果要引用该库,则不需要这样做,因为这样就可以从已加载的程序集中枚举类型。

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

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


Bhushan Firake所建议。

关于c# - Api Controller获取实现接口(interface)的所有类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32265292/

10-09 23:45