【问题标题】:Access IConfiguration in other classes of FunctionsStartup在其他类的 FunctionsStartup 中访问 IConfiguration
【发布时间】:2022-01-15 12:57:36
【问题描述】:

如何在 Azure Functions 项目的类中访问 IConfiguration 对象。我是这种代码的新手,但我需要访问项目中定义的一些类文件中的 IConfiguration。

例如:在 TestService 中,也在未列出 Startup.cs 的 SampleService 中

public override void Configure(IFunctionsHostBuilder builder)
{
   var config = builder.GetContext().Configuration;
   builder.Services.AddTransient<ITestService, TestService>();
}

【问题讨论】:

标签: c# asp.net-core azure-functions


【解决方案1】:

谢谢SunnyDark。发布您的建议作为答案,以便对面临类似问题的其他社区成员有所帮助。

IConfiguration默认添加到服务集合中作为启动的一部分,下面是IConfiguration的示例

public static class BootstrapCosmosDbClient {

    private static event EventHandler initializeDatabase = delegate { };

    public static IServiceCollection AddCosmosDbService(this IServiceCollection services) {

        Func<IServiceProvider, ICosmosDbService> factory = (sp) => {
            //resolve configuration
            IConfiguration configuration = sp.GetService<IConfiguration>();
            //and get the configured settings (Microsoft.Extensions.Configuration.Binder.dll)
            CosmosDbClientSettings cosmosDbClientSettings = configuration.Get<CosmosDbClientSettings>();
            string databaseName = cosmosDbClientSettings.CosmosDbDatabaseName;
            string containerName = cosmosDbClientSettings.CosmosDbCollectionName;
            string account = cosmosDbClientSettings.CosmosDbAccount;
            string key = cosmosDbClientSettings.CosmosDbKey;

            CosmosClientBuilder clientBuilder = new CosmosClientBuilder(account, key);
            CosmosClient client = clientBuilder.WithConnectionModeDirect().Build();
            CosmosDbService cosmosDbService = new CosmosDbService(client, databaseName, containerName);

            //async event handler
            EventHandler handler = null;
            handler = async (sender, args) => {
                initializeDatabase -= handler; //unsubscribe
                DatabaseResponse database = await client.CreateDatabaseIfNotExistsAsync(databaseName);
                await database.Database.CreateContainerIfNotExistsAsync(containerName, "/id");
            };
            initializeDatabase += handler; //subscribe
            initializeDatabase(null, EventArgs.Empty); //raise the event to initialize db

            return cosmosDbService;
        };
        services.AddSingleton<ICosmosDbService>(factory);
        return service;
    }
}

如需更多信息,请查看SOWeb Application

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 2012-12-14
    • 2013-08-18
    • 1970-01-01
    • 2019-03-18
    相关资源
    最近更新 更多