ASP.NET Core支持多种不同的配置选项。建议在应用程序的program类中只实例化一个Configuration实例,然后使用选择模式来访问各自的设置。
Configuration需要配置一个数据源,使得Configuration能正常工作。一般使用json格式的文件作为数据源,比如:appsetting.json
ConfigurationBuilder builder = new ConfigurationBuilder(); var config = builder.AddJsonFile("demo.json", optional: false).Build(); config.GetSection("Setting");
{ "Setting": { "Url": "http://localhost:8080/", "Name": "localhost" } }
1、使用配置文件参数的方法构造函数注入
public IConfiguration _configuration { get; set; } public TestController(IConfiguration configuration) { _configuration = configuration; } /// <summary> /// 方式一:直接读取单个值 /// </summary> public void GetConfig() { var url = _configuration["Setting:Url"]; var url2 = _configuration.GetValue<string>("Setting:Url"); var url3=_configuration.GetSection("Setting").GetSection("Url").Value; }
2、统一设置配置类
/// <summary> /// 统一将json格式转成配置类 /// </summary> public static class AppSettings { public static SettingClass settingClass { get; set; } public static void Init(IConfiguration configuration) { // 将Setting模块绑定到Json模块的Setting类 settingClass = new SettingClass(); configuration.Bind("Setting", settingClass); } }
/// <summary> ///配置模型类 /// </summary> public class Setting { /// <summary> /// url /// </summary> public string Url { get; set; } /// <summary> /// 名称 /// </summary> public string Name { get; set; } }
// program入口调用此方法完成统一配置类的设置 AppSettings.Init(Configuration);
public void GetConfig() { var url = AppSettings.setting.Url; var name = AppSettings.setting.Name; }
ILoggerFactory loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(new ConsoleLoggerProvider(filter,false)); loggerFactory.AddProvider(new DebugLoggerProvider(filter)); ILogger logger = loggerFactory.CreateLogger("指定名");
private readonly ILogger<Todocontroller> _logger; public Todocontroller (ILogger<TodoController> logger) _logger - logger; )
var logger = loggerFactory.createLogger ( "catchall" );
当应用程序添加一条日志记录时,必须指定日志级别。日志级别允许你控制应用程序输出日志的详细程度,以及把不同类型的日志传送给不同的日志记录器。
由于ILogger只定义了一个Log方法来写日志,但是日志级别有很多种,每次写log都要指定这么多的参数,非常不方便,这样就引入了日志模型。
public interface ILogger { void Log(LogLevel logLevel, EventId eventId, object state, Exception exception, Func<object, Exception, string> formatter); bool IsEnabled(LogLevel logLevel); IDisposable BeginScope<TState>(TState state); }
日志模型的Logger泛指所有实现了ILogger接口的所有类型以及对应对象,该接口定义在NuGet包“Microsoft.Extensions.Logging.Abstractions”中。
一条写入的日志消息会关联着一个日志记录事件,记录事件通过一个EventId对象来标识,Log方法的eventId参数类型就是EventId。它具有两个基本的属性Id和Name。
public struct EventId { public int Id { get; } public string Name{ get; } public EventId(int id, string name = null); public static implicit operator EventId(int i); }
根据日志消息采用的等级,日志模型还为ILogger接口定义了一系列针对不同日志等级的扩展方法
public class Todocontroller : controller { ILogger<Todocontroller> _logger; public Todocontroller (ILogger<Todocontroller> logger) {_logger - logger;} public IEnumerable<TodoItem>GetAll(){ _logger.LogInformation(LoggingEvents.xx,"items" ); } }
var logger = loggerFactory.createLogger ("message") ; logger.LogInformation ( "message") ;