我有一个基类,它包含执行一个http请求的基本逻辑。不过,由于依赖于用户设置的配置,我需要进行某种切换,因此网址的域名将会更改。如何正确地与派生类共享基类静态属性
基于此,我创建了一个静态属性,其中包含一个枚举,负责给我所需的基值。最重要的是,基类将通过nuget包进行分发,所以它对用户来说是有些密封的,只需要实现其必需的字段并且可以使用在其父节点上定义的任何逻辑。
所以基本上我到这个解决方案到目前为止。
public abstract class Base{
protected static Environment Environment { get; set; }
public static Init(Environment NewEnvironment){
Environment = NewEnvironment;
}
public void UseEnvironment(){
//use the selected environment on the method
}
}
public A : Base{
public void UseAEnvironment(){
UseEnvironment(); //using the environment defined with A.init() call
}
}
public B : Base{
public void UseBEnvironment(){
UseEnvironment(); //using the environment defined with B.init() call
}
我知道,只有一个在内存中的静态属性的副本,因此,当你把它设置为A类的值,B最终会使用相同的值。
我需要能够做到
A.Init(Environment.Debug);
B.Init(Environment.Release);
所以,当我运行该程序,在A类中定义的所有方法都与调试运行值,而B类将有释放值。
我的解决方案没有做到我需要的东西,有没有办法让它工作,或者是否有更好的架构决策来避免这种情况并实现类似的结果?
如果它是'static',它不属于一个实例。看起来你的'环境'应该属于一个实例。为什么它是静态的呢? – Andrew
是不是使用静态属性的东西,应该避免?也许你正在试图解决[XY问题](http://xyproblem.info/)? –