所以我有一个命名空间:
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...
}
}
答案 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的元素作为选项