【问题标题】:Accessing a service before BuildServiceProvider在 BuildServiceProvider 之前访问服务
【发布时间】:2021-11-05 08:28:38
【问题描述】:

我无法构建以下服务,因为需要将 configStoreService 注入到 AddInMemoryConfiguration、ConfigurationBuilder。那么,有没有办法在构建服务提供者之前检索 configStoreService 并使用它。

            var services = new ServiceCollection();
            var configStoreService = services.AddSingleton<ConfigurationStore>();
            var configuration = new ConfigurationBuilder()
               .AddInMemoryConfiguration(configStoreService)
               .Build();
            services.AddOptions();
            services.Configure<Temp>(configuration.GetSection(typeof(Temp).Name));
            services.RegisterOptionsType<Temp>(configuration);
            _serviceProvider = services.BuildServiceProvider();

【问题讨论】:

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


    【解决方案1】:

    前言:

    这似乎是一个有问题的请求。你需要配置来配置服务,但是你需要配置服务来获取配置。鸡和蛋的问题。

    做什么:

    创建一个配置实例,使用它来配置您的服务并将其添加到您的服务集合中

    var configStoreService = new ConfigurationStore(location, sku);
    services.AddSingleton(configStoreService);
    var configuration = new ConfigurationBuilder()
               .AddInMemoryConfiguration(configStoreService)
               .Build();
    services.AddOptions();
    services.Configure<Temp>(configuration.GetSection(typeof(Temp).Name));
    services.RegisterOptionsType<Temp>(configuration);
    _serviceProvider = services.BuildServiceProvider();
    

    仅供参考:

    我还必须补充一点,您无法从IServiceCollection 获得任何信息。你可以从IServiceProviderwhich 那里得到东西,你会在注册完成并调用BuildServiceProvider 之后得到。所以在此之前您无法访问集合中的项目。

    【讨论】:

      猜你喜欢
      • 2020-03-12
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      相关资源
      最近更新 更多