在 .Net 核心 API 应用程序中连接到 Azure 数据工厂的有效方法
Efficient way to make connection to azure data factory in .Net core API app
网络核心应用程序。我正在尝试从我的 .net 核心应用程序调用 azure 数据工厂。为了建立连接并调用 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);
}
然后我在class中实现如下。
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;
}
}
在界面上方和 Class 我在存储库层中添加。每当我想调用我的 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。有什么办法可以更有效地编写上面的代码吗?谁能建议我更好的方法。任何帮助,将不胜感激。谢谢
这是您可以使用的模型:
public class AuthenticationConfig : IAuthenticationConfig
{
public AuthenticationConfig ()
{
}
public string Config{ get; set; }
}
public interface IAuthenticationConfig
{
public string Config{ get; set; }
}
这在启动时:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AzureSettings>(options =>
{
options.Config=
Configuration.GetSection("AuthenticationConfig : Config").Value;
});
//*inject your repositories
services.AddSingleton<IAzureDataFactoryRepository, AzureDataFactoryRepository >();
}
通过在您的启动中配置它,您可以在您的解决方案中使用它:
public class AzureDataFactoryRepository : IAzureDataFactoryRepository
{
private readonly AuthenticationConfig _authenticationConfig;
public AzureDataFactoryRepository(IOptions<AzureSettings> authenticationConfig)
{
_authenticationConfig= _authenticationConfig.Value.Config;
}
//...
}
这里有另一个 选项 模式的例子:
Dependency injection between two ASP.NET Core projects
您可以使用它来注入您的设置并使它们对整个解决方案可见。微软强烈推荐
如果您想了解更多:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-3.1
网络核心应用程序。我正在尝试从我的 .net 核心应用程序调用 azure 数据工厂。为了建立连接并调用 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);
}
然后我在class中实现如下。
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;
}
}
在界面上方和 Class 我在存储库层中添加。每当我想调用我的 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。有什么办法可以更有效地编写上面的代码吗?谁能建议我更好的方法。任何帮助,将不胜感激。谢谢
这是您可以使用的模型:
public class AuthenticationConfig : IAuthenticationConfig
{
public AuthenticationConfig ()
{
}
public string Config{ get; set; }
}
public interface IAuthenticationConfig
{
public string Config{ get; set; }
}
这在启动时:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AzureSettings>(options =>
{
options.Config=
Configuration.GetSection("AuthenticationConfig : Config").Value;
});
//*inject your repositories
services.AddSingleton<IAzureDataFactoryRepository, AzureDataFactoryRepository >();
}
通过在您的启动中配置它,您可以在您的解决方案中使用它:
public class AzureDataFactoryRepository : IAzureDataFactoryRepository
{
private readonly AuthenticationConfig _authenticationConfig;
public AzureDataFactoryRepository(IOptions<AzureSettings> authenticationConfig)
{
_authenticationConfig= _authenticationConfig.Value.Config;
}
//...
}
这里有另一个 选项 模式的例子:
Dependency injection between two ASP.NET Core projects
您可以使用它来注入您的设置并使它们对整个解决方案可见。微软强烈推荐
如果您想了解更多: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-3.1