net основное приложение. Я пытаюсь вызвать azure фабрику данных из моего основного приложения. net. Чтобы установить sh соединение и вызвать adf, я создал интерфейс ниже двумя методами.
public interface IAzureDataFactoryRepository
{
public DataFactoryManagementClient InitiateConnection(AuthenticationConfig authenticationConfig);
public Task<string> RunADFPipeline(DataFactoryManagementClient dataFactoryManagementClient, Dictionary<string, object> keyValuePairs, string resourceGroup, string dataFactoryName, string pieplineName);
}
Затем я реализовал в классе, как показано ниже.
public class AzureDataFactoryRepository : IAzureDataFactoryRepository
{
private DataFactoryManagementClient _dataFactoryManagementClient;
public DataFactoryManagementClient InitiateConnection(AuthenticationConfig authenticationConfig)
{
var context = new AuthenticationContext("https://login.windows.net/" + authenticationConfig.TenantId);
ClientCredential cc = new ClientCredential(authenticationConfig.ClientId, authenticationConfig.ClientSecret);
AuthenticationResult result = context.AcquireTokenAsync(
"https://management.azure.com/", cc).Result;
ServiceClientCredentials cred = new TokenCredentials(result.AccessToken);
_dataFactoryManagementClient = new DataFactoryManagementClient(cred)
{
SubscriptionId = authenticationConfig.SubscriptionId
};
return _dataFactoryManagementClient;
}
public async Task<string> RunADFPipeline(DataFactoryManagementClient dataFactoryManagementClient, Dictionary<string,object> keyValuePairs, string resourceGroup, string dataFactoryName, string pieplineName)
{
CreateRunResponse runResponse = dataFactoryManagementClient.Pipelines.CreateRunWithHttpMessagesAsync(resourceGroup, dataFactoryName, pieplineName, parameters: keyValuePairs).Result.Body;
return runResponse.RunId;
}
}
Интерфейс выше и класс I добавил на уровне репозитория. Всякий раз, когда я хочу вызвать свой конвейер ADF, я делаю, как показано ниже.
var adfAuthSettings = Configuration.GetSection("AzureAdF").Get<ADFClient>();
var azureAdAuthSettings = Configuration.GetSection("AzureAd").Get<AuthenticationConfig>();
Dictionary<string, object> parameters = new Dictionary<string, object>
{
{"parameter", parameters}
};
DataFactoryManagementClient dataFactoryManagementClient = azureDataFactoryRepository.InitiateConnection(azureAdAuthSettings);
var result = await azureDataFactoryRepository.RunADFPipeline(dataFactoryManagementClient, parameters, adfAuthSettings.ResourceGroupName, adfAuthSettings.DataFactoryName, ApplicationConstants.SciHubPipeline);
return result;
В приведенном выше коде всякий раз, когда я хочу сначала вызвать репозиторий ADF RunADFPipeline, я всегда должен вызывать InitiateConnection, передавая значения из моей конфигурации. Также каждый раз я должен звонить adfAuthSettings = Configuration.GetSection("AzureAdF").Get<ADFClient>();
, чтобы загрузить значения в модель. Есть ли способ сделать это только один раз вместо того, чтобы делать это внутри всех методов? Тогда я смогу запустить метод RunADFPipeline. Каждый раз перед вызовом RunADFPipeline следует вызывать InitiateConnection. Есть ли способ более эффективно писать вышеуказанный код? Может ли кто-нибудь предложить мне лучший подход. Любая помощь будет оценена. Спасибо