繁体   English   中英

如何在程序集中搜索实现所需通用接口的类型

[英]How to search assemblies for types that implement desired generic interface

我正在搜索程序集以识别实现所需通用接口的任何类,以便我可以动态实例化一个实例。 这是我正在使用的代码:

var types = assembly.GetTypes();
var assemblyFormatters = types.Where(type => type.GetInterfaces().Any(i => 
   i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IInterface<>)));

该代码适用于标准类:

public class Implementation : IInterface<object>

但不适用于泛型类:

public class GenericImplementation<T> : IInterface<T>

事件更奇怪,代码在中间窗口中运行时成功运行,但在单元测试框架内运行时则不行。 立即窗口返回2种类型,在调试器下运行的测试代码仅返回非泛型实现。

我希望代码返回两种类型

原来这是装配问题。 我使用以下方法加载程序集:

var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
foreach (var assembly in Directory.GetFiles(path, "*.dll"))
{
    Assembly.LoadFile(assembly);
}

将加载的程序集与Assembly.GetExecutingAssembly()进行比较时,程序集不相等。 由于类型具有对其各自组件的引用,因此类型不相等。 移动使用AppDomain.CurrentDomain.GetAssemblies()解决了这个问题,因为我正在加载已由应用程序加载的程序集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM