1

我在这里找到了 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;
        }
    }

但是当我尝试调用构建方法时也存在一些问题。

4

1 回答 1

0

看起来Build您尝试调用的方法需要参数,但是在调用时您没有传递任何东西buildMethodInfo.Invoke(objectBuilder, null);

抛出的异常是TargetParameterCountException。来自 MSDN:

当调用的参数数量与预期数量不匹配时引发的异常。

您应该使用调试器单步执行代码并检查正在调用的方法的原型,以查看它需要哪些参数。Build考虑到您的评论,即在以不同方式调用该方法(没有传递参数)时会看到相同的问题,这意味着该方法的实现需要一个或多个参数。

或者,您可以尝试静态调用该方法,而不是通过反射,以确保可以以调用它的方式Invoke调用它。

于 2014-10-17T13:52:30.920 回答