[.Net Core学习四]配置文件

配置文件里一般存储一些不变的信息 功能和web.config里的appSettings相同

Core里以DI为主 所以不能直接读配置文件 以依赖注入的方式获取

添加配置文件

配置文件加入到配置信息中

 public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
             .ConfigureAppConfiguration((hostingContext, config) =>
             {
                 config.SetBasePath(Directory.GetCurrentDirectory());
                 config.AddInMemoryCollection(arrayDict);
                 config.AddJsonFile(
                     "json_array.json", optional: false, reloadOnChange: false);
                 config.AddJsonFile(
                     "starship.json", optional: false, reloadOnChange: false);
                 config.AddXmlFile(
                     "tvshow.xml", optional: false, reloadOnChange: false);
                 config.AddEFConfiguration(
                     options => options.UseInMemoryDatabase("InMemoryDb"));
                 config.AddCommandLine(args);
             })
                .UseStartup<Startup>();

初始化实例并配置映射

 services.AddOptions();
            services.Configure<ConfigSetting>(Configuration.GetSection("BookstoreDatabaseSettings"));
            services.Configure<List<ConfigSetting>>(Configuration.GetSection("RoleList"));

使用

  public class GetConfig
    {
        //获取配置信息使用 GetSection
        private readonly IOptions<ConfigSetting> options;
        private readonly IConfiguration configuration;
        private readonly IOptions<List<ConfigSetting>> optionsList;
        public GetConfig(IOptions<ConfigSetting> options, IConfiguration configuration,IOptions<List<ConfigSetting>> optionsList) {
            this.options = options;
            this.configuration = configuration;
            this.optionsList = optionsList;
        }
        /// <summary>
        /// 获取单个实体
        /// </summary>
        /// <returns></returns>
        public ConfigSetting Get() {
            return options.Value;
        }
        /// <summary>
        /// 获取单一字符串
        /// </summary>
        /// <returns></returns>
        public string Get1() {
            return configuration.GetSection("StrSetting").Value;
        }
        /// <summary>
        /// 获取自定义配置
        /// </summary>
        /// <returns></returns>
        public string Get2() {
            return configuration.GetSection("array:entries:0").Value;
        }
        /// <summary>
        /// 获取集合
        /// </summary>
        /// <returns></returns>
        public List<ConfigSetting> GetList()
        {
            return optionsList.Value;
        }
    }

方法加入到服务

services.AddScoped<GetConfig>();

使用

 public class IndexModel : PageModel
    {
        private GetConfig getConfig { get; set; }
        public IndexModel( GetConfig getConfig) {
            this.getConfig = getConfig;
        }
        public JsonResult OnGet()
        {
            return new JsonResult(getConfig.GetList());
        }
    }

自定义配置

public static Dictionary<string, string> arrayDict =
       new Dictionary<string, string>
       {
            {"array:entries:0", "value0"},
            {"array:entries:1", "value1"},
            {"array:entries:2", "value2"},
            {"array:entries:4", "value4"},
            {"array:entries:5", "value5"}
       };

json文件

 

配置EF

在添加自定义配置时有这样一个添加方法

  config.AddEFConfiguration(
                     options => options.UseInMemoryDatabase("InMemoryDb"));

这个就是添加EF配置信息的

EF拓展 

数据库实体(表)

 public class EFConfigurationValue
    {
        public string Id { get; set; }
        public string Value { get; set; }
    }

上下文

public class EFConfigurationContext : DbContext
    {
        public EFConfigurationContext(DbContextOptions options) : base(options)
        {
        }

        public DbSet<EFConfigurationValue> Values { get; set; }
    }

默认数据库信息

 public class EFConfigurationProvider : ConfigurationProvider
    {
        public EFConfigurationProvider(Action<DbContextOptionsBuilder> optionsAction)
        {
            OptionsAction = optionsAction;
        }

        Action<DbContextOptionsBuilder> OptionsAction { get; }

        // Load config data from EF DB.
        public override void Load()
        {
            var builder = new DbContextOptionsBuilder<EFConfigurationContext>();

            OptionsAction(builder);

            using (var dbContext = new EFConfigurationContext(builder.Options))
            {
                dbContext.Database.EnsureCreated();

                Data = !dbContext.Values.Any()
                    ? CreateAndSaveDefaultValues(dbContext)
                    : dbContext.Values.ToDictionary(c => c.Id, c => c.Value);
            }
        }

        private static IDictionary<string, string> CreateAndSaveDefaultValues(
            EFConfigurationContext dbContext)
        {
            // Quotes (c)2005 Universal Pictures: Serenity
            // https://www.uphe.com/movies/serenity
            var configValues = new Dictionary<string, string>
            {
                { "quote1", "I aim to misbehave." },
                { "quote2", "I swallowed a bug." },
                { "quote3", "You can't stop the signal, Mal." }
            };

            dbContext.Values.AddRange(configValues
                .Select(kvp => new EFConfigurationValue
                {
                    Id = kvp.Key,
                    Value = kvp.Value
                })
                .ToArray());

            dbContext.SaveChanges();

            return configValues;
        }
    }

委托绑定

 public class EFConfigurationSource : IConfigurationSource
    {
        private readonly Action<DbContextOptionsBuilder> _optionsAction;

        public EFConfigurationSource(Action<DbContextOptionsBuilder> optionsAction)
        {
            _optionsAction = optionsAction;
        }

        public IConfigurationProvider Build(IConfigurationBuilder builder)
        {
            return new EFConfigurationProvider(_optionsAction);
        }
    }

新建AddEFConfiguration方法

public static class EntityFrameworkExtensions
    {
        public static IConfigurationBuilder AddEFConfiguration(
        this IConfigurationBuilder builder,
        Action<DbContextOptionsBuilder> optionsAction)
        {
            return builder.Add(new EFConfigurationSource(optionsAction));
        }
    }

使用

  config.AddEFConfiguration(
                     options => options.UseInMemoryDatabase("InMemoryDb"));

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值