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

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

加載 中間 view tar public png 配置到 index 不同

命令行配置

我們通過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配置文件 技術分享圖片

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