我有一些代码来加载程序集并获取所有类型,实现某个接口,就像这样(假设asm是一个有效的加载程序集).
var results = from type in asm.GetTypes() where typeof(IServiceJob).IsAssignableFrom(type) select type;
现在我陷入困境:我需要创建这些对象的实例并在对象上调用方法和属性.我需要将对已创建对象的引用存储在一个数组中以供以后使用.
哇 - 几天前我只在博客上发表过这篇文章.这是我返回实现给定接口的所有类型的实例的方法:
private static IEnumerableInstancesOf () where T : class { var type = typeof(T); return from t in type.Assembly.GetExportedTypes() where t.IsClass && type.IsAssignableFrom(t) && t.GetConstructor(new Type[0]) != null select (T)Activator.CreateInstance(t); }
如果您重构它以接受汇编参数而不是使用接口的程序集,它就会变得足够灵活以满足您的需要.