Я верю, что вы ожидаете, что GetAccount();
будет вызван, когда объект будет построен.
Не так работают свойства.
Получатель свойства действует так же, как метод, поэтому фактически ваше свойство
public RecurlyAccount Account { get { return GetAccount(); } }
Действует точно так же, как метод GetAccount
.
Призвание:
var myAccount = this.Account;
На 100% идентичен:
var myAccount = this.GetAccount();
Если этот метод вызывает некоторые видимые побочные эффекты (что, я полагаю, вызывает, иначе не имеет значения, вызывается ли он в конструкторе или нет), то он, скорее всего, не должен находиться в свойстве get
.
Каждый раз, когда к Account
обращаются, метод вызывается так:
var data = new RecurlyData(1079);
var account = data.Account;
var account2 = data.Account;
Метод GetAccount
был вызван дважды. Значение не сохраняется, если вы не напишите код для его сохранения.
@ ответ pstrjds должен дать вам желаемое поведение, но в качестве небольшой альтернативы, если вам не нравится это частное поле поддержки, вы также можете написать:
public class RecurlyData
{
private readonly string _accountCode;
public RecurlyData(int accountCode)
{
_accountCode = accountCode.ToString();
Account = GetAccount(_accountCode);
}
public RecurlyAccount Account { get; private set; }
private static RecurlyAccount GetAccount(string accountCode)
{
var account = RecurlyAccount.Get(accountCode);
account.BillingInfo = RecurlyBillingInfo.Get(account.AccountCode);
return account;
}
}
Результат почти точно такой же, за исключением того, что это всего лишь private
, а не readonly
, так что вы можете установить его где-то, кроме конструктора. Я лично нахожу это чище.