我知道如何获得实现接口的所有类型,例如使用此code。
但是我还没弄清楚为什么我无法在我的Asp.Net MVC ApiController中完成这项工作。我有两个项目(为命名约定道歉。我从头开始创建一个解决方案,以确保我现有的解决方案不是错误的原因):
.sln
-WebAPI
-ClassLibrary1
-Interface1
-Class1 : Interface1
WebApi有一个对ClassLibrary1的项目引用。
调用我的ApiController它会查看bin目录中的dll。它能够获取ClassLibrary1.dll,但当它试图查看可从Interface1分配的类型时,它找不到任何内容。
代码只是一个.net mvc项目和类库,并托管了here
答案 0 :(得分:1)
您不需要通过其路径查找引用的程序集,您可以使用该类型来获取其程序集,如下所示:
(conj result (+ 2 x))
<强>输出:强>
接口1
的Class1
答案 1 :(得分:0)
问题是您已将程序集ClassLibrary1
加载两次,因此引用中的ClassLibrary1.Interface1
与加载的程序集中的ClassLibrary1.Interface1
的接口不同。
将Interface1
移至自己的共享库,并在ClassLibrary1
和WebAPI
中引用此共享库以解决您的问题。
关于Assembly.LoadFile
,如果您计划制作类似系统的插件,这很好。如果您正在引用库,则不需要这样做,因为您可以枚举已加载的程序集中的类型。
在这种情况下,您可以使用:
typeof(Interface1).Assembly.GetTypes().Where(c => typeof(Interface1).IsAssignableFrom(c));
根据Bhushan Firake的建议。