Какой шаблон использовать для значения init - PullRequest
0 голосов
/ 14 января 2019

У меня есть сервис, который работает с внешним ресурсом (Microsoft Graph):

public class Office365DomainService : IOffice365DomainService
{
    private GraphServiceClient _graphClient;

    public async Task AddDomainAsync(string domain)
    {
        await _graphClient.Domains.Request().AddAsync(new Microsoft.Graph.Domain { Id = domain });
    }

    public async Task<string> GetMxRecordForDomainAsync(string domain)
    {
        var collection = await _graphClient.Domains[domain].ServiceConfigurationRecords.Request().GetAsync();
        return String.Empty;
    }

    public async Task<string> GetVerificationRecordForDomainAsync(string domain)
    {
        var records = (await _graphClient.Domains[domain].VerificationDnsRecords.Request().GetAsync());
        string verificationText = String.Empty;

        foreach (var record in records)
        {
            if (record.RecordType == "Txt")
            {
                verificationText = ((Microsoft.Graph.DomainDnsTxtRecord)record).Text;
                break;
            }
        }
        return verificationText;
    }

    public async Task VerifyDomainAsync(string domain)
    {
        await _graphClient.Domains[domain].Verify().Request().PostAsync();
    }
}

_graphClient должно быть инициировано с access_token, но я хочу выполнить отложенную загрузку, поэтому я не хочу добавлять его в конструктор. Хорошо, одно решение - добавить свойство:

    public string AccessToken { set => _graphClient = (new GraphSdkHelper()).GetAuthenticatedClient(value); }

Работает нормально, если мы не забудем установить AccessToken перед вызовом любого метода. Но если мы забудем это сделать? Лучший способ - позвонить на получение access_token другой службой, если это _graphClient не init. Как это сделать осторожно?

1 Ответ

0 голосов
/ 14 января 2019

Почему бы не использовать Lazy Initialization? Пожалуйста, посмотрите на документы здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...