| File: AspireDataLakeExtensions.DataLakeFileSystemComponent.cs | Web Access |
| Project: src\src\Components\Aspire.Azure.Storage.Files.DataLake\Aspire.Azure.Storage.Files.DataLake.csproj (Aspire.Azure.Storage.Files.DataLake) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Aspire.Azure.Common; using Aspire.Azure.Storage.Files.DataLake; using Azure.Core; using Azure.Core.Extensions; using Azure.Storage.Files.DataLake; using Microsoft.Extensions.Azure; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Diagnostics.HealthChecks; namespace Microsoft.Extensions.Hosting; public static partial class AspireDataLakeExtensions { private sealed class DataLakeFileSystemComponent : AzureComponent<AzureDataLakeFileSystemSettings, DataLakeFileSystemClient, DataLakeClientOptions> { protected override IAzureClientBuilder<DataLakeFileSystemClient, DataLakeClientOptions> AddClient( AzureClientFactoryBuilder azureFactoryBuilder, AzureDataLakeFileSystemSettings settings, string connectionName, string configurationSectionName) => ((IAzureClientFactoryBuilderWithCredential)azureFactoryBuilder) .RegisterClientFactory<DataLakeFileSystemClient, DataLakeClientOptions>( (options, cred) => { if (string.IsNullOrEmpty(settings.FileSystemName)) { throw new InvalidOperationException( $"The connection string '{connectionName}' does not exist or is missing the file system name."); } var connectionString = settings.ConnectionString; if (string.IsNullOrEmpty(connectionString) && settings.ServiceUri is null) { throw new InvalidOperationException( $"A DataLakeServiceClient could not be configured. Ensure valid connection information was provided in 'ConnectionStrings:{connectionName}' or specify a 'ConnectionString' or 'ServiceUri' in the '{configurationSectionName}' configuration section."); } var dataLakeServiceClient = !string.IsNullOrEmpty(connectionString) ? new DataLakeServiceClient(connectionString, options) : cred is not null ? new DataLakeServiceClient(settings.ServiceUri, cred, options) : new DataLakeServiceClient(settings.ServiceUri, options); var fileSystemClient = dataLakeServiceClient.GetFileSystemClient(settings.FileSystemName); return fileSystemClient; }, requiresCredential: false); protected override bool GetHealthCheckEnabled(AzureDataLakeFileSystemSettings settings) => !settings.DisableHealthChecks; protected override bool GetMetricsEnabled(AzureDataLakeFileSystemSettings settings) => false; protected override bool GetTracingEnabled(AzureDataLakeFileSystemSettings settings) => !settings.DisableTracing; protected override TokenCredential? GetTokenCredential(AzureDataLakeFileSystemSettings settings) => settings.Credential; protected override void BindSettingsToConfiguration( AzureDataLakeFileSystemSettings settings, IConfiguration configuration) { configuration.Bind(settings); } protected override void BindClientOptionsToConfiguration( IAzureClientBuilder<DataLakeFileSystemClient, DataLakeClientOptions> clientBuilder, IConfiguration configuration) #pragma warning disable IDE0200 // Remove unnecessary lambda expression - needed so the ConfigBinder Source Generator works => clientBuilder.ConfigureOptions(options => configuration.Bind(options)); #pragma warning restore IDE0200 protected override IHealthCheck CreateHealthCheck( DataLakeFileSystemClient client, AzureDataLakeFileSystemSettings settings) => new AzureDataLakeFileSystemHealthCheck(client); } }