【发布时间】:2015-01-30 11:58:13
【问题描述】:
我有一个库,里面有一个静态字段。我想创建一个应用程序并引用这个库,所以我有这个静态字段的两个实例。 .Net 运行时不允许两次引用同一个库,但我想知道是否有可能克服这个限制?
我不能更改库,但我可以复制/重命名它。
【问题讨论】:
我有一个库,里面有一个静态字段。我想创建一个应用程序并引用这个库,所以我有这个静态字段的两个实例。 .Net 运行时不允许两次引用同一个库,但我想知道是否有可能克服这个限制?
我不能更改库,但我可以复制/重命名它。
【问题讨论】:
这并不像你想象的那么疯狂。事实上,您可以使用AppDomains 来实现这一点。
每个AppDomain 都有自己的静态变量存储位置。因此,您可以在进程中创建第二个 AppDomain,并使用继承自 MarshalByRefObject 的对象在它们之间进行通信,例如在 this MSDN example 中。
【讨论】:
虽然 AppDomains 上的 Lucas' suggestion 可以工作,但您也可以使用泛型创建此效果,因为具有不同泛型类型参数的类被视为不同的类,因此具有自己的静态字段。
public class SomeClass<T>
{
public static string SomeField;
}
然后:
SomeClass<int>.SomeField = "A";
SomeClass<string>.SomeField = "B";
Console.WriteLine(SomeClass<int>.SomeField); // A
Console.WriteLine(SomeClass<string>.SomeField); // B
例如,SomeClass<int> 将设置在库中,而 SomeClass<string> 将是您的副本。当然,这只有在您可以更改库或库已经使用泛型时才有效。
【讨论】:
这两个建议都应该有效,但它们在架构方面都很棒。
我不了解上下文,但在您的情况下,是否可以创建一个聚合类,该聚合类具有一个非静态的新属性并且只有两个实例。 这听起来对我来说是一个更好的方法。
每当我有智能代码时,我的脑海中就会出现警报。对于开发人员来说,智能代码总是太聪明了。
【讨论】: