菜鳥入門【ASP.NET Core】5:命令行配置、Json文件配置、Bind讀取配置到C#實例、在Core Mvc中使用Options
阿新 • • 發佈:2018-01-24
加載 中間 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()//這時候直接執行的話不會有結果,因為我們沒有對configuration進行配置 我們可以在調試裏面進行參數配置,運行結果 configuration一般以鍵值對的形式存在,我們如果要給他傳遞默認的參數的話,可以用一個dictionary來傳遞,然後以內存的形式添加進去初始化一個ConfigurationBuilder .AddCommandLine(args);//擴展函數 var configuration = builder.Build();//拿到configuration //查看configuration裏面有什麽 Console.WriteLine($"name:{configuration["name"]}"); Console.WriteLine($"age:{configuration["age"]}"); Console.ReadLine(); }
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