首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ConfigurationRoot添加到UWP程序中的依赖注入中?

如何将ConfigurationRoot添加到UWP程序中的依赖注入中?
EN

Stack Overflow用户
提问于 2019-04-02 12:52:56
回答 1查看 737关注 0票数 1

在我的UWP应用程序中,我能够使用Microsoft.Extensions.Configuration包从JSON格式的appSettings文件中读取数据。

代码语言:javascript
复制
    IConfiguration configuration = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json", true, true)
        .AddJsonFile($"appsettings.{App.UWPENVIRONMENT}.json", true, true)
        .Build();
    string clientId = configuration["security:clientId"];
    string authority = configuration["security:authority"];

我现在似乎不能做的是使用System.Composition依赖项注入将配置提供给我的UWP应用程序的其余部分。由于配置对象的构建方式(使用Build方法),我无法理解如何将此配置嵌入到某种构造函数中。

想到的一个选择是,我可以将接口与对象关联起来,如下所示:

代码语言:javascript
复制
        conventions.ForObject(configuration)
            .Shared()
            .Export(ecb => ecb.AsContractType<IConfiguration>());

但是DI包似乎不支持这种想法。我该如何解决这个问题:

  1. 找到一种方法来构建一个类型。
  2. 将接口与具体实例关联起来。
  3. 其他
EN

回答 1

Stack Overflow用户

发布于 2019-04-02 15:34:08

下面是创建类型化ConfigurationRoot的代码:

代码语言:javascript
复制
    /// <summary>
    /// The configuration for this application.
    /// </summary>
    public class ApplicationConfiguration : ConfigurationRoot
    {
        /// <summary>
        /// The client id of the service application to which we want to connect.
        /// </summary>
#if PRODUCTION
        private const string UWPENVIRONMENT = "Production";
#elif STAGING
        private const string UWPENVIRONMENT = "Staging";
#else
        private const string UWPENVIRONMENT = "Development";
#endif

        /// <summary>
        /// Initializes a new instance of the <see cref="ApplicationConfiguration"/> class.
        /// </summary>
        public ApplicationConfiguration()
            : base(ApplicationConfiguration.GetProviders())
        {
        }

        /// <summary>
        /// Gets the configuration providers.
        /// </summary>
        /// <returns>A list of the configuration providers.</returns>
        private static List<IConfigurationProvider> GetProviders()
        {
            // Build a configuration that reads from the appsettings.json files and extract the providers.
            IConfigurationRoot configurationRoot = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json", true, true)
                .AddJsonFile($"appsettings.{ApplicationConfiguration.UWPENVIRONMENT}.json", true, true)
                .Build();
            return configurationRoot.Providers.ToList();
        }
    }

并将其添加到DI中:

代码语言:javascript
复制
    conventions.ForType<ApplicationConfiguration>().Shared().Export(ecb => ecb.AsContractType<IConfiguration>());

您的客户端现在将使用与.NET核心web服务大致相同的配置文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55475305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档