程序集"A"提供了提供静态属性的有价值的类...
class ValuableClass
{
public static string MyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
程序集"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];
}
}
Run Code Online (Sandbox Code Playgroud)
不要使用静态属性:
class ValuableClass
{
public string MyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,这两个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
Run Code Online (Sandbox Code Playgroud)
由于SomeClassInB并且SomeClassInC分别只能在B和中访问C,因此不存在一个程序集"污染"另一个数据的风险.
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |