经过更多的坚持和研究,我想出了如何迁移我以前的 MVC5Global.asax
到 ASP.NET CoreStartup.cs
。下面您将看到实现 Host 确定的 AppSettings 的所有相关代码。
应用程序设置.json
{
"ConnectionStrings": {
"External": "Data Source=externalserver;Initial Catalog=externaldatabase;Persist Security Info=True;User ID=externalid;Password=externalpassword",
"Internal": "Data Source=internalserver;Initial Catalog=internaldatabase;Persist Security Info=True;User ID=internalid;Password=internalpassword",
"Test": "Data Source=testserver;Initial Catalog=testdatabase;Persist Security Info=True;User ID=testid;Password=testpassword"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
应用程序设置.cs
namespace WebApplication1
{
public class AppSettings
{
public string Colour;
public string ConnectionString;
}
}
启动.cs
using System;
using System.Net;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace WebApplication1
{
public class Startup
{
public AppSettings AppSettings;
public static string Colour;
public static string External;
public static string HostName;
public static string Internal;
public static string Test;
public Startup(IHostingEnvironment hostingEnvironment)
{
var configurationBuilder = new ConfigurationBuilder().SetBasePath(hostingEnvironment.ContentRootPath).AddJsonFile("appsettings.json", true, true).AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", true).AddEnvironmentVariables();
Configuration = configurationBuilder.Build();
External = Configuration.GetConnectionString("External");
Internal = Configuration.GetConnectionString("Internal");
Test = Configuration.GetConnectionString("Test");
}
public IConfigurationRoot Configuration { get; }
public void ConfigureServices(IServiceCollection serviceCollection)
{
serviceCollection.AddMvc();
serviceCollection.Configure<AppSettings>(appSettings =>
{
HostName = Dns.GetHostName().ToLower();
switch (HostName)
{
case "external-domain":
appSettings.ConnectionString = External;
appSettings.Colour = "blue";
break;
case "internal-domain":
appSettings.ConnectionString = Internal;
appSettings.Colour = "purple";
break;
default:
appSettings.ConnectionString = Test;
appSettings.Colour = "red";
break;
}
});
}
public void Configure(IApplicationBuilder applicationBuilder, IHostingEnvironment hostingEnvironment, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (hostingEnvironment.IsDevelopment())
{
applicationBuilder.UseDeveloperExceptionPage();
applicationBuilder.UseBrowserLink();
}
else {
applicationBuilder.UseExceptionHandler("/Home/Error");
}
applicationBuilder.UseStaticFiles();
applicationBuilder.UseMvc(routes =>
{
routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
HomeController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
namespace WebApplication1.Controllers
{
public class HomeController : Controller
{
private readonly AppSettings _appSettings;
public HomeController(IOptions<AppSettings> appSettings)
{
_appSettings = appSettings.Value;
}
public IActionResult Index()
{
var colour = _appSettings.Colour;
return View();
}
public IActionResult Error()
{
return View();
}
}
}
在视图中,您可以像这样使用依赖注入:
@using Microsoft.Extensions.Options
@{
@inject IOptions<AppSettings> OptionsAppSettings
@OptionsAppSettings.Value.Colour;
}
我希望这对其他人有用:-)