命令行配置
我們通過vs2017創建一個控制台項目CommandLineSample
可以看到現在項目以來的是dotnet core framework
我們需要吧asp.net core引用進來,我們可以直接添加Microsoft.AspNetCore.All
安裝完成之后,我們可以通過using Microsoft.Extensions.Configuration;來進行后續的配置

using System; using Microsoft.Extensions.Configuration; namespace CommandLineSample { class Program { 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","wyt"}, { "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 101", "Students": [ { "name": "jesse", "age": "13" }, { "name": "wyt", "age": "18" }, { "name": "zzz", "age": "12" } ] }
然后讀取class.json文件
讀取結果
Bind讀取配置到C#實例
新建控制台項目OptionsBindSample
選擇空的模板
這個時候創建的Startup.cs文件中沒有Configuration
由於我們要用到Configuration,所以我們要用到依賴注入,把Configuration加進來
這個時候我們就可以在Startup.cs中使用Configuration了
新建Class.class班級類

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 101", "Students": [ { "name": "jesse", "age": "13" }, { "name": "wyt", "age": "18" }, { "name": "zzz", "age": "12" } ] }
為什么要添加配置文件呢?我們可以看下圖:因為在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配置文件