程序集“ A”提供了有价值的类,该类提供了静态属性。
class ValuableClass
{
public static string MyProperty { get; set; }
}
程序集“ B”和“ C”使用ValuableClass及其静态属性。一切正常,直到在同一过程中加载“ B”和“ C”。
我应该如何重构MyStaticProperty实现以使“ B”和“ C”调用保持隔离?我不能依赖线程ID(多个线程可能会更改每个程序集的静态属性),而且我也不能依赖进程ID,因为它是同一进程。
我想简化的代码应该如下所示,但是我不确定这是最佳实践
protected static IDictionary<string, string> MyProperties
public static string MyProperty
{
set {
string key = Assembly.GetCallingAssembly().FullName
MyProperties[key] = value;
}
get {
string key = Assembly.GetCallingAssembly().FullName
return MyProperties[key];
}
}
最佳答案
不要使用静态属性:
class ValuableClass
{
public string MyProperty { get; set; }
}
现在,
B
和C
都可以创建ValuableClass
的单独实例。现在,我们如何使所有B和C都可以访问这些实例? “干净”的方法是在整个B和C中使用依赖项注入,但是这对于大型遗留项目可能不可行。
作为一个简单的解决方案,
B
和C
可以通过静态属性使它们的ValuableClass
实例可用:class SomeClassInB
{
private static readonly ValuableClass myValuableStuff = new ValuableClass();
public static ValuableClass MyValuableStuff { get { return myValuableStuff; } }
}
// same for C
由于
SomeClassInB
和SomeClassInC
只能分别在B
和C
中访问,因此,一个程序集不会“污染”另一个程序的数据。关于c# - 区分两个引用静态属性的调用程序集的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28629701/