我在这里找到了NBuilder的这个实现: https://gist.github.com/markgibaud/4150878
这就像一个魅力,直到我需要在里面添加一些集合 例如:
public class UserDto
{
public string UserName {get;set;}
public List<AddressDto> Addresses {get;set;} //this will be null
}
public class AddressDto
{
public string Street {get;set;}
//...
}
我想用至少一条记录来填充任何收藏。
我最终得到了这段代码:
private static object BuildObjectList(Type type)
{
try
{
var builderClassType = typeof (Builder<>);
Type[] args = {type};
var genericBuilderType = builderClassType.MakeGenericType(args);
var builder = Activator.CreateInstance(genericBuilderType);
var createListOfSizeMethodInfo = builder.GetType().GetMethod("CreateListOfSize", new[] {typeof (int)});
var objectBuilder = createListOfSizeMethodInfo.Invoke(builder, new object[] {1});
var buildMethodInfo = objectBuilder.GetType().GetMethod("Build");
return buildMethodInfo.Invoke(objectBuilder, null);
}
catch (Exception ex)
{
Console.WriteLine(ex);
return null;
}
}
但是当我尝试调用构建方法时,也存在一些问题。
答案 0 :(得分:0)
您尝试调用的Build
方法看起来需要参数,但是当您致电buildMethodInfo.Invoke(objectBuilder, null);
抛出的异常是TargetParameterCountException。来自MSDN:
当一个参数的数量时抛出的异常 调用与预期的数字不匹配。
您应该使用调试器逐步执行代码并检查正在调用的方法的原型以查看它所采用的参数。考虑到您的注释,当以不同的方式调用Build
方法时(没有传递任何参数),可以看到相同的问题,这意味着此方法的实现需要一个或多个参数。
或者,您可以尝试静态调用该方法,而不是通过反射,只是为了确保可以Invoke
调用它的方式调用它。