public static void RegisterRule <TType>(this AutoFaker <TType> faker, FakerRule <TType> fakerRule) where TType : class { //dynamically cast object to correct type var genericRuleType = typeof(FakerRule <,>); var specificRuleType = genericRuleType.MakeGenericType(typeof(TType), fakerRule.PropertyType); var castMethod = typeof(TemplateExtensions).GetMethod("Cast") !.MakeGenericMethod(new Type[] { specificRuleType }); var castedObject = castMethod.Invoke(null, new object[] { fakerRule }); //dynamically call the RuleFor method on faker object var ruleForMethod = ReflectionHelper.GetMethod(faker.GetType(), "RuleFor", new Type[] { fakerRule.PropertyType }, new Type[] { ReflectionHelper.GetPropType(castedObject !, "Property"), ReflectionHelper.GetPropType(castedObject !, "Setter") });
/// <summary> /// Tells the generator not to generate a value, but to use the default value for the type /// </summary> /// <typeparam name="TProperty"></typeparam> /// <typeparam name="TType"></typeparam> /// <param name="property"></param> /// <returns></returns> public static AutoFaker <TType> Ignore <TType, TProperty>(this AutoFaker <TType> src, Expression <Func <TType, TProperty> > property) where TType : class { //if we ignore we will get the default value for the type var defaultObj = Activator.CreateInstance <TType>(); var prop = typeof(TType).GetProperty(ReflectionHelper.GetMemberName(property.Body), BindingFlags.Public | BindingFlags.Instance); var valueOfProperty = (TProperty)prop !.GetValue(defaultObj) !; var setter = new Func <Faker, TProperty>(f => valueOfProperty); var rule = new FakerRule <TType, TProperty> { Property = property, Setter = setter }; src.RegisterRule(rule); return(src); }