我知道如何获取实现接口的所有类型,例如使用此code。
但是我还没有弄清楚为什么不能在Asp.Net MVC ApiController中使此工作正常进行。我有两个项目(对命名约定表示歉意。我从头开始创建了一个解决方案,只是为了确保现有的不是导致错误的原因):
.sln
-WebAPI
-ClassLibrary1
-Interface1
-Class1 : Interface1
WebApi有一个对ClassLibrary1的项目引用。
调用我的ApiController会查看bin目录中的dll。它能够获取ClassLibrary1.dll,但是当它试图查看从Interface1分配的类型时却找不到任何内容。
代码只是一个.net mvc项目和类库,并托管here
最佳答案
问题是您已两次加载了程序集ClassLibrary1
,因此引用中的ClassLibrary1.Interface1
与加载的程序集中的ClassLibrary1.Interface1
接口不同。
将Interface1
移至其自己的共享库,并在ClassLibrary1
和WebAPI
中引用此共享库以解决您的问题。
关于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/