我有一個抽象類,我用它來存儲有關OAuth憑證信息:嵌套抽象類與覆蓋
public abstract class Provider
{
private readonly string _accessToken;
private readonly string _refreshToken;
private readonly JsonMeta _providerMeta;
protected Provider(TokenProfile profile)
{
_accessToken = profile.AccessToken;
_refreshToken = profile.RefreshToken;
_providerMeta =
JsonConvert.DeserializeObject<JsonMeta>(profile.JsonMeta);
}
protected class JsonMeta {}
}
我用這個基類來創建更多的特定屬性的子類:
public class SalesforceProvider : Provider
{
public SalesforceProvider(TokenProfile profile) : base(profile)
{
}
//Get unique information from the Json
protected new class JsonMeta
{
public string instance_url;
public string token_type;
public string id_token;
}
//Salesforce calls must be made to a specific server associated
//with the users account. Most OAuth calls contain unique
//metadata like this in their responses that is needed to
//use their service
public string SomeData()
{
return Salesforce.Leads(_providerMeta.instance_url);
}
}
然而,因爲JsonMeta
在抽象類中實現,並且在類中實現的屬性不存在,直到我們到達派生類,因此派生類中的JsonMeta
對象沒有屬性。
但我的問題是,類名稱和實例化將爲每個派生類相同,它只是將根據JSON返回中的元數據更改的屬性。
所以我的問題是,我可以在我的抽象中有一個空類,在抽象構造函數中實例化以減少重複,但是對派生類中存在的屬性會這樣嗎?
如果不是,做這種事情的最好方法是什麼?
如何以及何時JsonMeta是它被初始化後使用? –
使抽象類具有通用性嗎? – clcto
@WiktorZychla在salesforces案例中,我有一些數據訪問方法需要像'instance_url'這樣的信息來進行REST API調用,所以我將在SalesforceProvider中有一個公共方法,該方法中的'instance_url'獲得一個專用引用。 – Wesley