通过反射实现通用类型参数接口的构建类型

我具有以下结构:

namespace A
{
  abstract public class Baseclass<To,T> { }
}

namespace A.B
{
  interface IFooB { double Prop1 { get; set; } }

  abstract public class BaseSubClassB<T> : A.Baseclass<float,T> { }

  public class SubClassB<T> : BaseSubClassB<T> where T : IFooB { }
}

namespace A.C
{
  interface IFooC { double Prop2 { get; set; } }

  abstract public class BaseSubClassC<T> : A.Baseclass<bool,T> { }

  pubic class SubClassC<T> : BaseSubClassC<T> where T : IFooC { }
}

我还有一个方法可以递归地给出从同一程序集中的基本类型继承的非抽象泛型和非泛型类型的列表,

public static List<Type> GetallDerivedTypes(Type baseType) { ... };

使GetallDerivedTypes(typeof(A.Baseclass<,>))基本返回

List<Type> allSubClasses = new List<Type> {typeof(A.B.SubclassB<>),typeof(A.C.SubClassC<>)}

现在,我想在allSubClasses中为每个收集的类型创建一个实例。此处的目标是检入单元测试,以确保在每个实例上调用基类中定义的某些方法均不会引发任何异常。 据我了解,我将不得不执行以下操作:

foreach(var type in allSubClasses)
{
  Type constructedType = type.MakeGenericType(new Type[] { typeof(TYPEPARAMETER) });
  var obj = activator.CreateInstance(constructedType);
  Assert.That(obj.operation()); <- OK
}

其中TYPEPARAMETER可以是一个类,它提供allSubClasses的子类的类型参数中所需的所有属性,例如

public class TYPEPARAMETER : A.B.IFooB,A.C.IFooC,...
{
  double Prop1 { get; set; }
  double Prop2 { get; set; }
  ...
}

这是创建实例的有效方法吗? 如果是的话,那么在运行时通过反射实现所有必需的接口及其属性的TYPEPARAMETER构建方法是什么呢?


编辑:

我看着System.Reflection.Emit.TypeBuilder通过反射构建TYPEPARAMETER。我如何获得所收集子类A.B.IFooB,...的所有通用类型参数接口allSubClasses以便按所述方式构建TYPEPARAMETER

lj449028498 回答:通过反射实现通用类型参数接口的构建类型

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2427691.html

大家都在问