1.说明
1)采用Key-Value键值对的形式进行配置
2)配置的存储方式可以通过内存、JSON、XML、INI、环境变量和启动参数等
3)配置系统解耦
4)优化了依赖注入
2.通过JSON进行配置(配置数据库连接)
1)创建appsettings.json、ConnectionOptions.cs
appsettings.json:
{
"Logging": {
"LogLevel": {
"Defaule": "Warning"
}
},
"ConnectionStrings": {
"DefaultConnection": "Database=InMemory;"
}
}
ConnectionOptions.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CoreModelTwo.Settings
{
public class ConnectionOptions
{
public string DefaultConnection { get; set; }
}
}
2)依赖注入获取配置文件信息(红色部分)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CoreModelTwo.Services;
using CoreModelTwo.Settings;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace CoreModelTwo
{
public class Startup
{
private readonly IConfiguration _configuration;
//构造函数注入
public Startup(IConfiguration configuration)
{
_configuration = configuration;
}
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
//注册MVC所需要的相关服务到IoC容器里
services.AddMvc();
//使用Singleton进行IoC依赖注入(每当有请求IMovieService都会返回MovieService实例)
services.AddSingleton<IMovieService,MovieService>();
services.AddSingleton<ICinemaService, CinemaService>();
//获取appsettings.json的配置信息
services.Configure<ConnectionOptions>(_configuration.GetSection("ConnectionStrings"));
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILogger<Startup> logger)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
#region 配置路由
//将错误显示在页面
app.UseStatusCodePages();
//跳转到指定错误位置
//app.UseStatusCodePagesWithRedirects("/Error");
//加载wwwroot里头的文件(使用此可以加载出来)
app.UseStaticFiles();
//配置路由
app.UseMvc(routes=> {
routes.MapRoute(
name:"default",
template:"{controller=Cinema}/{action=Index}/{id?}");
});
#endregion
}
}
}
注:
3.在CinemaController.cs里头通过强类型ConnectionOptions.cs获取配置参数
using CoreModel;
using CoreModelTwo.Services;
using CoreModelTwo.Settings;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CoreModelTwo.Controllers
{
public class CinemaController : Controller
{
private readonly ICinemaService _cinemaService;
private readonly IOptions<ConnectionOptions> _options;
public CinemaController(ICinemaService cinemaService,IOptions<ConnectionOptions> options)
{
_cinemaService = cinemaService;
_options = options;
}
public async Task<IActionResult> Index()
{
ViewBag.Title = "电影院列表";
return View(await _cinemaService.GetAllAsync());
}
public IActionResult Add()
{
ViewBag.Title = "添加电影院";
return View(new Cinema());
}
[HttpPost]
public async Task<IActionResult> Add(Cinema model)
{
if (ModelState.IsValid)
{
await _cinemaService.AddAsync(model);
}
return RedirectToAction("Index");
}
public async Task<IActionResult> Edit(int cinemaId)
{
var exist = await _cinemaService.GetCinemaById(cinemaId);
return View(exist);
}
[HttpPost]
public async Task<IActionResult> Edit(int Id, Cinema model)
{
if (ModelState.IsValid)
{
var exist = await _cinemaService.GetCinemaById(Id);
if (exist == null)
{
return NotFound();
}
exist.Name = model.Name;
exist.Location = model.Location;
exist.Capacity = model.Capacity;
}
return RedirectToAction("Index");
}
}
}
调试获得:
当然也可以使用页面去获取(红色部分)
@model IEnumerable<CoreModel.Cinema>
@using CoreModelTwo.Settings
@using Microsoft.Extensions.Options
@inject IOptions<ConnectionOptions> options
<div class="container">
<div class="row">
<table class="table table-bordered">
<caption></caption>
<thead class="thead-dark">
<tr>
<th scope="col">编码</th>
<th scope="col">电影院名称</th>
<th scope="col">地址</th>
<th scope="col">容量</th>
<th scope="col">操作</th>
<th scope="col">@options.Value.DefaultConnection</th>
</tr>
</thead>
<tbody>
@Html.DisplayForModel()
</tbody>
</table>
<a asp-controller="Cinema" asp-action="Add">添加</a>
</div>
</div>
结果显示:
参阅:https://v.qq.com/x/page/x0750why9sm.html
谢谢Dave
转载于:https://www.cnblogs.com/dzw159/p/10591238.html