在程序集之间交换任意对象

时间:2016-01-19 11:07:08

标签: c# .net static .net-4.0

在我的C#应用​​程序中,我将几个程序集加载到一个Application中。为了在程序集之间快速交换对象,我在常用的.NET命名空间中寻找一个现有的类,我可以“滥用”它来交换通用对象。

我在考虑System.ConfigurationManager.AppSettings,但这只支持字符串。是否有一个object类型?

我知道这是在程序集之间交换数据的可怕解决方案,但我现在无法更改接口。

1 个答案:

答案 0 :(得分:2)

我假设你想这样做:

// Assembly 1
SomeSuperGlobal.Set("someKey", new Foo { Bar = "baz" });

// Assembly 2
var foo = SomeSuperGlobal.Get("someKey");

首先发出警告,你所拥有的是一个糟糕的设计。你should not let your code rely on global state,这些做法至少从六十年代就被废除了。不要这样做,并彻底考虑重新设计应用程序。

话虽如此,你可以use named data slots

// Assembly 1
LocalDataStoreSlot dataSlot =  System.Threading.Thread.AllocateNamedDataSlot("someKey");
System.Threading.Thread.SetData(dataSlot, new Foo { Bar = "baz" });

// Assembly 2
LocalDataStoreSlot dataSlot = System.Threading.Thread.GetNamedDataSlot("someKey");
var foo = System.Threading.Thread.GetData(dataSlot);

请务必阅读Thread.AllocateNamedDataSlot()'s documentation