在WCF中,通常将接口和实现类放在单独的程序集中。我正在构建一个类,创建基于配置的WCF代理类(无论是从服务还是在我的web中的serviceactivation)。配置或从svc文件中的Service属性获取)。在我的类中,我想从服务类中检索可分配的接口—在类和接口位于同一程序集中的情况下,这很容易:
Type type = Type.GetType("MyNamespace.MyClass, MyAssembly");
if (type != null)
{
var interfaces =
Assembly.GetAssembly(type)
.GetTypes()
.Where(t => t.IsInterface && t.IsAssignableFrom(type));
}
通过获取所有程序集(使用CurrentDomain.GetAssemblies())并以这种方式找到接口,缺少使用一些蛮力反射解决方案,是否有规定的方法从不同(未知)程序集获取接口?
此外,我知道使用WCF发现而不是自己做这项工作-不幸的是,在我的情况下它不是一个选项。
原来有一个方便的反射方法叫做"GetInterfaces()",可以提供这个信息:
Type type = Type.GetType(activation.Service);
if (type != null)
Type[] interfaces = type.GetInterfaces();