通过方法调用将自定义对象传递给DLL

时间:2013-02-21 14:52:37

标签: c# methods namespaces

所以我有一个命名空间:

namespace Main
{
  Class DoStuff
  {
    Code...

    var tableVars = new Dictionary<string, tableObject>();

    Code...

    string insertResponse = MyDLL.Insert(someString, tableVars, someString);

    Code../

  }
  public class tableObject
  {
    public string Name { get; set; }
    public string Type { get; set; }
    public string Value { get; set; }
    public string Default { get; set; }
  }
}

我有第二个命名空间:

namespace MyDLL
{
  public static string Insert(string table, Dictionary<string, tableObject> tableVars, string connection)
  {
    Code...
  }
}

在我的第一个命名空间Main中,我引用了第二个命名空间MyDLL。如何让DLL识别我的自定义对象而不引用我的主命名空间(因为这会导致循环引用)?

我也尝试使用var关键字,但在这种情况下它不起作用:

namespace MyDLL
    {
      public static string Insert(string table, var tableVars, string connection)
      {
        Code...
      }
    }

2 个答案:

答案 0 :(得分:3)

将所有常见类型(在本例中为tableObject)移动到第3个dll并从两个更高的程序集引用他

答案 1 :(得分:1)

我昨天正在阅读.NET 4.0中引入的ExpandoObject,使用此对象类型,您可以在运行时动态创建对象并将对象传递到另一个名称空间。

这可能不是一个完美的解决方案,因为可能存在性能问题(我无法相信Expando对象和静态对象一样快)。还没有编译(或运行)时间检查以确保添加所有字段。

Dynamic / ExpandoObject还支持向对象添加方法。

但是,这里有一些示例来源:

    void Method1()
    {


        var tableVars = new Dictionary<string, dynamic>();

        dynamic sampleObject = new ExpandoObject();
        sampleObject.Name = "Count";
        sampleObject.Type = "Int32";
        sampleObject.Value = "4";
        sampleObject.Default = "0";

        tableVars.Add("Sample", sampleObject);

        Insert("TableName", tableVars, "Connection");


    }

    string Insert(string table, Dictionary<string, dynamic> tableVars, string connection)
    {

        foreach (var v in tableVars)
        {
            Console.Write("Name is: ");

            Console.WriteLine(v.Value.Name);

        }

        return "";
    }

根据你的情况,最好像@Benny在答案中指出的那样,但我想引入DLR的元素作为选项