zoukankan      html  css  js  c++  java
  • .Net5 控制台 读取配置文件+依赖注入

    .NET 5(控制台应用程序)配置文件加载与DI注入配置数据

    一、配置文件

    添加Nugget包Microsoft.Extensions.Configuration(ConfigurationBuilder) 和 Microsoft.Extensions.Configuration.Json(AddJsonFile)

     

            var config = new ConfigurationBuilder()
              .AddInMemoryCollection() //将配置文件的数据加载到内存中
              .SetBasePath(Directory.GetCurrentDirectory()) //指定配置文件所在的目录
              .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) //指定加载的配置文件  --划重点..记得始终复制
              .Build(); //编译成对象  
    二、与DI配合使用

    添加Nugget包Microsoft.Extensions.DependencyInjection(ServiceCollection) 和 Microsoft.Extensions.Options.ConfigurationExtensions(AddOptions)

     

            var service = new ServiceCollection()
              .AddOptions() //注入IOptions<T>,才可以在DI容器中获取IOptions<T>
              .Configure<Appsettings>(config.GetSection("Appsettings")) //注入配置数据

              .Configure<Appsettings>(t =>
              {
                   t.Name = "Tom"; //修改Name的值,可以对注入的配置数据进行修改
              })
              .AddTransient<IUserService, UserService>() //注入服务
              .BuildServiceProvider(); //编译
    三、读取配置文件的方法

    1、普通使用

     

            Console.WriteLine(config["AllowedHosts"]); //获取配置中的数据
           config["AllowedHosts"] = "test"; //修改配置对象的数据,配置对象的数据是可以被修改的。但是不会存放到JSON文件中,只在内存
           Console.WriteLine(config["AllowedHosts"]);//测试修改后的AllowedHosts值
           Console.WriteLine(config["LogLevel22222"]); //获取配置文件中不存在数据也是不会报错的
           Console.WriteLine(config["Logging:LogLevel"]); //获取:Logging -> LogLevel 的值

    2、通过构造函数,在DI容器中获取配置文件

     

         //第一步:构造函数
       private readonly IOptions<Appsettings> _settings;
       public 构造函数(IOptions<Appsettings> setting)
      {
           _settings = setting;
      }
     //第二步:在方法里面取值的方式,如下
     _settings.Value.EmailFrom,
     _settings.Value.EnableSsl,
     _settings.Value.EmailHost,
      _settings.Value.IsBodyHtml,
    四、使用服务Service

    1、直接获取服务(IUserService)

     

            var userService = service.GetService<IUserService>();
           Console.WriteLine(userService.GetInput(""));

    2、通过构造函数依赖服务

     

        private readonly IUserService_userService;
       public 构造函数(IUserService iUserService)
      {
           _userService= iUserService;
      }
    五、.Net Core控制台程序中文乱码

    安装Nugget包:System.Text.Encoding.CodePages并在Main方法开始时注册

     

            //编码注册
           Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    引用-.NET Core(控制台应用程序)配置文件加载与DI注入配置数据 - 简书 (jianshu.com)

  • 相关阅读:
    OnFileOpen与OnOpenDocument(转)
    Wpf应用程序进入全屏和退出全屏
    在WPF中使用Emgu加载Image<,>图像的两种方法
    C#中ListBox控件重绘Item项
    sdut2404 Super Prime ACM算法设计
    真彩色制式下IplImage转成CBitmap格式
    【转】中缀表达式转换为后缀表达式
    MFC中CImage的简单复制方法 (Copy CImage)
    齐鲁软件大赛尖峰时刻团队
    Priest John's Busiest Day HDU2491 ACM算法设计
  • 原文地址:https://www.cnblogs.com/vsnb/p/15272617.html
Copyright © 2011-2022 走看看