Bind,Options读取配置到C#实例

首先创建一个网站 Asp.net Core Mvc 空网站 起名叫做OptionsBindSample

通过Option和Bind将Json文件里面的配置转成C#里面的一个实体,相互之间映射起来

Bind将Json文件里面的配置转成实例

打开Startup.cs,由于要使用Configuration

using Microsoft.Extensions.Configuration;

    public class Startup
    {
        public IConfiguration Configuration { get; set; }
        /// <summary>
        /// 依赖注入
        /// </summary>
        /// <param name="configuration"></param>
        public Startup(IConfiguration configuration)
        {
            this.Configuration = configuration;
        }

然后就可以使用Configuration了

准备动作,创建一个Class类

public class Class
    {
        public string 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; }
    }

然后这次添加一个json文件,叫Appsettings.json,这也就是以前Config文件

为什么叫这个名字,因为IWebHost 会自动将Appsettings.json配置信息读取到Configuration中

namespace OptionsBindSample
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)//会默认将appsettings.json 读取
                .UseStartup<Startup>()
                .Build();
    }
}

 然后在Startup类里面中的Configure方法中

        // 运行时调用此方法。使用此方法配置HTTP请求管道。
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IConfiguration configuration, IApplicationLifetime applicationLifetime)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            
            app.Run(async (context) =>
            {
                var myClass = new Class();
                Configuration.Bind(myClass);//绑定实体
                //输出到界面信息
                await context.Response.WriteAsync($"ClassNo:{myClass.ClassNo}");
                await context.Response.WriteAsync($"ClassDesc:{myClass.ClassDesc}");
                foreach (var item in myClass.Students)
                {
                    await context.Response.WriteAsync($"name:{item.name}");
                    await context.Response.WriteAsync($"Age:{item.Age}");
                }

            });
        }

Option方式

准备 创建Controllers,Views文件夹,Controllers里面添加HomeController,Views里面创建Home文件夹添加Index.cshtml视图

首先在Startup类里面 注释掉app.Run,否则Mvc请求管道会抵,并启动默认路由

ConfigureServices 方法中添加MVC依赖注入的配置

        // 运行时调用此方法。使用此方法向容器添加服务。
        //为更多的信息关于如何配置你的应用程序,访问https://go.microsoft.com/fwlink/?linkid = 398940
        public void ConfigureServices(IServiceCollection services)
        {
       services.Configure<Class>(Configuration);//注册Class services.AddMvc();
//MVC依赖注入配置 }

在控制器中使用依赖注入,在HomeController

 

using Microsoft.Extensions.Options;
public class HomeController : Controller
    {
        private readonly Class _myclass;
        //Options
        public HomeController(IOptions<Class> classAccesser)
        {
            this._myclass = classAccesser.Value;
        }
        public IActionResult Index()
        {
            return View(_myclass);
        }
}

对应的视图 Index.cshtml

@model OptionsBindSample.Class
@{
    ViewData["Title"] = "Index";
}

<h2>Index</h2>
<h4>Class No @Model.ClassNo</h4>
<h4>ClassDesc @Model.ClassDesc</h4>
<h3>Students</h3>
<div>
    @foreach (var item in Model.Students)
    {
        <span>@item.name</span>
        <span>@item.Age</span>
    }
</div>

结果显示

另一种方式控制器中不用options 直接在视图中创建

 

结果是相同的

 

 

 

posted @ 2018-01-26 13:23  Anker_张  阅读(513)  评论(0编辑  收藏  举报