我有一個基類,它包含執行一個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/)? –