我正在尝试制作一个模拟数据生成器,它将根据一组规则生成模拟。我一直在和Bogus玩耍。我不想每次都为我的实体类设置我的规则,如果它们从某个接口派生,我希望一般能够将规则应用于类。
想象一下,我有重用通用接口的实体:
public interface IHasGeneric<T>
where T : IHasGeneric<T>
{
string Marker { get; set; }
}
public class Foo : IHasGeneric<Foo>
{
public string Marker { get; set; }
}
public class Bar : IHasGeneric<Bar>
{
public string Marker { get; set; }
}
注意:我知道这并没有描述为什么我有一个将自身作为参数的泛型。但是,它需要太多解释,并且无法从我的架构中改变。因此,请按照要求使用它。
现在我想为 Fakers 创建一个集中式工厂,但是我正在努力弄清楚如何将规则普遍应用于将要生成的任何类型。
public class MockDataGenerator
{
public T Generate<T>()
where T : class
{
var faker = new StatefulFaker<T>();
this.ApplyDefaultRules<T>(faker);
}
public void ApplyDefaultRules<T>(StatefulFaker<T> faker)
where T : class
{
//T Cannot be used as a type parameter 'T' ... No Implicit Conversion to IHasGeneric<T>
if (typeof(T) is IHasGeneric<T>>)
{
}
}
}
尝试强制转换 T 以查看是否可以应用规则时出现错误
T 不能用作类型参数 'T' ... 不能隐式转换为 IHasGeneric。我如何一般地将规则应用于实现接口的类型?