我正在搜索程序集以标识实现所需通用接口的任何类,以便可以动态实例化实例。这是我正在使用的代码:
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>
事件陌生人,代码在中间窗口中运行时可以成功运行,但在单元测试框架中运行时则无法运行。立即窗口返回两种类型,在调试器下运行的测试代码仅返回非通用实现。
我希望两种类型的代码都可以返回
答案 0 :(得分:0)
原来是程序集存在问题。我正在使用以下程序加载程序集:
var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
foreach (var assembly in Directory.GetFiles(path, "*.dll"))
{
Assembly.LoadFile(assembly);
}
将加载的程序集与Assembly.GetExecutingAssembly()比较时,程序集不相等。由于类型引用了它们各自的程序集,因此类型不相等。转而使用AppDomain.CurrentDomain.GetAssemblies()
解决了这个问题,因为我正在加载应用程序已经加载的程序集。