2014-09-12 74 views
1

我发现这个实现NBuilder的位置: https://gist.github.com/markgibaud/4150878NBuilder用法在收藏

这就像一个魅力,直到我需要里面添加一些收藏。
例如:

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

您的代码是正确的,并返回传递的类型列表。我认为你的问题源于你如何设法分配这种方法的结果。请添加有关您如何使用它的信息。 – samy 2014-10-15 11:26:30

+0

下面是这个例子:http://pastebin.com/pp9HQ6ci – ShP 2014-10-15 13:42:43

+0

ShP,你可以添加最少的代码来重现问题到你的问题,并添加你遇到的错误吗? – samy 2014-10-15 13:45:18

回答

0

它看起来像Build方法你尝试调用需要的参数,但你不能传递任何事情,当你调用buildMethodInfo.Invoke(objectBuilder, null);

所引发的异常是TargetParameterCountException。从MSDN:

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

您应该使用调试程序逐句通过代码,并检查正在调用的方法的原型,以查看它需要的参数。考虑到你的评论,当以不同的方式调用Build方法(没有参数传递给它)时,会看到同样的问题,这意味着此方法的实现需要一个或多个参数。

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

+0

这种情况也失败: 生成器> .CreateListOfSize(1).Build() ...这之一: 生成器 .CreateNew()生成() – ShP 2014-10-17 14:11:51