zoukankan      html  css  js  c++  java
  • 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 直接在视图中创建

    结果是相同的

     

  • 相关阅读:
    安装go版本
    golang简介
    安装MySQL
    art.dialog.art 中,将子页面窗口中的值传递给父框架中
    Windows7下安装CentOS
    生成uuid
    如何开启win7端口的图文教程
    PHPMailer不能发送邮件
    sql 如果关联表 没有值 设置 默认值
    php array 分页
  • 原文地址:https://www.cnblogs.com/AnkerZhang/p/8359060.html
Copyright © 2011-2022 走看看