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

本文关键字:任意 对象 交换 之间 程序集 | 更新日期: 2023-09-27 18:31:02

在我的 C# 应用程序中,我将多个程序集加载到一个应用程序中。为了在程序集之间快速交换对象,我正在常用的 .NET 命名空间中寻找一个现有类,我可以"滥用"该类来交换泛型对象。

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

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

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

我假设你想这样做:

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

首先警告一下,你所拥有的是一个糟糕的设计。你不应该让你的代码依赖于全局状态,这些做法至少从六十年代就被废除了。不要这样做,并彻底考虑重新设计应用程序。

话虽如此,您可以使用命名数据槽:

// 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()的文档。