我在这里找到了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;
}
}但是,当我尝试调用build方法时,也会出现一些问题。
发布于 2014-10-17 21:52:31
您尝试调用的Build方法看起来需要参数,但是在调用buildMethodInfo.Invoke(objectBuilder, null);时,您没有向它传递任何东西
抛出的异常是TargetParameterCountException。来自MSDN:
当调用的参数数量与预期数量不匹配时引发的异常。
您应该使用调试器逐步执行代码,并检查正在调用的方法的原型,以了解它需要哪些参数。考虑到您的评论,当以不同的方式调用Build方法(没有向其传递任何参数)时,也会出现同样的问题,这意味着该方法的实现需要一个或多个参数。
或者,您可以尝试静态地调用该方法,而不是通过反射,以确保可以按照Invoke调用它的方式调用它。
https://stackoverflow.com/questions/25816859
复制相似问题