0

我正在尝试制作一个模拟数据生成器,它将根据一组规则生成模拟。我一直在和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。我如何一般地将规则应用于实现接口的类型?

4

0 回答 0