菜鳥入門【ASP.NET Core】5:命令行配置、Json文件配置、Bind讀取配置到C#實例、在Core Mvc中使用Options


 

命令行配置

我們通過vs2017創建一個控制台項目CommandLineSample

 

可以看到現在項目以來的是dotnet core framework
我們需要吧 asp.net core引用進來,我們可以直接添加Microsoft.AspNetCore.All
 

 

安裝完成之后,我們可以通過using Microsoft.Extensions.Configuration;來進行后續的配置
static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()//初始化一個ConfigurationBuilder
                .AddCommandLine(args);//擴展函數
 
            var configuration = builder.Build();//拿到configuration
 
 
            //查看configuration里面有什么
            Console.WriteLine($"name:{configuration["name"]}");
            Console.WriteLine($"age:{configuration["age"]}");
 
            Console.ReadLine();
        }
這時候直接執行的話不會有結果,因為我們沒有對configuration進行配置
我們可以在調試里面進行參數配置,運行結果
configuration一般以鍵值對的形式存在,我們如果要給他傳遞默認的參數的話,可以用一個dictionary來傳遞,然后以內存的形式添加進去
using System;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
 
namespace CommandLineSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var settings = new Dictionary<string, string>
            {
                {"name","菜鳥起飛"},
                {"age","18"}
            };
 
 
            var builder = new ConfigurationBuilder()//初始化一個ConfigurationBuilder
                .AddInMemoryCollection(settings)//以內存的形式添加進來
                .AddCommandLine(args);//擴展函數
 
            var configuration = builder.Build();//拿到configuration
 
 
            //查看configuration里面有什么
            Console.WriteLine($"name:{configuration["name"]}");
            Console.WriteLine($"age:{configuration["age"]}");
 
            Console.ReadLine();
        }
    }
}
 
這個時候我們就可以將調試里面的參數去掉了,直接用控制台啟動項目,可以看到傳遞參數和不傳遞參數會有不同的配置顯示效果
 
 

Json文件配置

 新建控制台項目JsonConfigSample
我們需要吧 asp.net core引用進來,我們可以直接添加Microsoft.AspNetCore.All
然后新建json文件 class.json 並生成到bin
{
  "ClassNo": "1",
  "ClassDesc": "菜鳥入門ASP.NET Core",
 
  "Students": [
    {
      "name": "老王",
      "age": "17"
    },
    {
      "name": "老李",
      "age": "16"
    },
    {
      "name": "老牛",
      "age": "17"
    }
  ]
}

 

然后讀取class.json文件,讀取結果
 

 

Bind讀取配置到C#實例

 新建控制台項目OptionsBindSample

 

選擇空的模板
這個時候創建的Startup.cs文件中沒有Configuration,由於我們要用到Configuration,所以我們要用到依賴注入,把Configuration加進來
這個時候我們就可以在Startup.cs中使用Configuration了
新建Class.class班級類
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
 
namespace OptionsBindSample
{
    public class Class
    {
        public int ClassNo { get; set; }
 
        public string ClassDesc { get; set; }
 
        public List<Student> Students { get; set; }
    }
 
    public class Student
    {
        public string Name { get; set; }
 
        public string Age { get; set; }
    }
}

添加asp.net配置文件appsettings.json
{
  "ClassNo": "1",
  "ClassDesc": "菜鳥入門ASP.NET Core",
 
  "Students": [
    {
      "name": "老王",
      "age": "17"
    },
    {
      "name": "老李",
      "age": "16"
    },
    {
      "name": "老牛",
      "age": "17"
    }
  ]
}
為什么要添加配置文件呢?我們可以看下圖:因為在WebHost啟動的時候默認是沒有添加配置文件的,但是當項目啟動的時候,我們會默認讀取appsettings.json這里的內容到Configuration里面去,是通過CreateDefaultBuilder這個方法把他們加載進去的
 
這時候我們可以在Startup.cs當中將讀取的appsetting的Configuration綁定到對應的Class實例化模型,並打印出來,運行后現實吧效果,顯示的格式忘調了,各位可以嘗試自己去調一調

 

 在Core Mvc中使用Options

添加MVC中間件(Middleware)

首先,我們在前面的OptionsBindSample項目中新建文件夾:Controllers、Views。添加一個HomeController。給HomeController的Index動作添加Index視圖,
接下來在Startup.cs中注釋掉以下內容,因為如果不注釋的話管道會一直被占用,導致我們的mvc無法訪問
 然后在Startup.cs的ConfigureServices方法中添加mvc
接下來在Startup.cs的Configure方法中配置使用MVC默認路由

 

控制器依賴注入

 通過依賴注入的方式在HomeController中注入myClass。只不過這次我們不能用bing的方法,而是用IOption<T>泛型方法將班級注入進去

 

這時候我們返回強類型視圖

 

依賴注入和視圖完成之后呢,我們要在Startup.cs的ConfigureServices方法中注冊一下Class到Options,將Configuration傳進去,這樣在HomeController調用IOptions<Class>的時候,才會能從配置中拿到Class的內容
 

 

啟動之后效果
 

 

【小擴展】:我們也可以把注入直接取出來,通過依賴注入框架直接在視圖中顯示出來

新建控制器Home2Controller,不需要添加任何依賴注入的配置。創建Index視圖,直接在視圖中引用IOtions<T>以強類型視圖的方式注入進去

 

運行效果
 

 

談一談 Program.cs中的BuildWebHost方法

當我們創建mvc項目的時候,自動創建的Program.cs中的BuildWebHost是下面這個樣子的,無法訪問其他的*,json配置文件
對其進行修改來讀取特定的*.json配置文件

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM