同时这也允许在程序的任何地方注入IOptions<FirstConfig>了:
这个Configure方法不仅仅可以映射ConfigurationRoot, 还可以映射配置的一部分:
配置变化
在项目运行的时候, 项目的配置信息可能会发生变化.
当采用的是基于文件的配置时, 如果配置数据有变化了, 我们应该让配置模型重新加载, 这就需要把AddJsonFile里面的配置属性 ReloadOnChange 设置为 true:
这时, 无论在哪各地方使用了IConfigurationRoot和IConfiguration, 它们都会反映出最新的值, 但是IOptions<T>却不行. 即使文件变化了并且配置模型也通过文件提供商进行了更新, IOptions<T>的实例仍然包含的是原始值.
为了让配置数据可以在这种强类型映射的类上体现, 就需要使用IOptionsSnapshot<T>:
IOptionsSnapshot<T> 的开销很小, 可以放心使用
日志
ASP.NET Core 提供了6个内置的日志提供商。
需要使用日志的话,只需注入一个ILogger对象即可,不过该对象首先要在DI容器中注册。
这个ILogger接口主要是提供了Log方法:
记录Log的时候使用Log方法即可:
不过可以看到,该方法参数很多,用起来还是略显麻烦的。
幸运的是,针对Log还有几个扩展方法,他们就简单了很多:
LogCritical,用来记录严重的事情
LogDebug,记录调试信息
LogError,记录异常
LogInformation,记录信息性的事情
LogTrace,记录追踪信息
LogWarning,记录警告信息
在项目中配置和使用Log,只需在Program.cs里调用IWebHostBuilder的ConfigureLogging扩展方法即可:
本例中,我们把log配置成在控制台输出。
如果只是输出到控制台,其实我们就多此一举了,因为CreateDefaultBuilder这个方法里已经做了一些Log的配置,看一下反编译的源码:
可以看到logging的一些配置数据是从整体配置的Logging部分取出来的,然后配置了使用输出到控制台和Debug窗口的提供商。
记录Log的时候,通常情况下使用那几个扩展方法就足够了:
请注意,这里我注入的是ILogger<T>类型的logger,其中T可以用来表示日志的分类,它可以是任何类型,但通常是记录日志时所在的类。
运行项目后,可以看到我记录的日志: