初始值使用什么模式

时间:2019-01-14 19:06:02

标签: c# design-patterns microsoft-graph

我有一项可与外部资源(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。如何仔细做?

1 个答案:

答案 0 :(得分:1)

为什么不使用惰性初始化? 请看一下文档here

相关问题