1、定义option类
public class EmailOption
{
public string Title { get; set; }
public string Body { get; set; }
public string From { get; set; }
}
2、注册
services.Configure<EmailOption>(op => op.Title = "services.Configure<EmailOption>--DefaultName");//默认--名称empty
services.Configure<EmailOption>("FromMemory", op => op.Title = "services.Configure<EmailOption>---FromMemory");//指定名称,程序里面配置
services.Configure<EmailOption>("FromConfiguration", Configuration.GetSection("Email"));//从配置文件读取
services.Configure<EmailOption>("FromConfigurationNew", Configuration.GetSection("EmailNew"));//从配置文件读取
services.AddOptions<EmailOption>("AddOption").Configure(op => op.Title = "AddOption Title--DefaultName");//等价于Configure
services.Configure<EmailOption>(null, op => op.From = "services.Configure<EmailOption>--Name null--Same With ConfigureAll");
//services.ConfigureAll<EmailOption>(op => op.From = "ConfigureAll");
services.PostConfigure<EmailOption>(null, op => op.Body = "services.PostConfigure<EmailOption>--Name null--Same With PostConfigureAll");
3、使用option类
public class OptionController : Controller
{
private readonly IConfiguration _iConfiguration = null;
private readonly ILogger<OptionController> _logger;
private IOptions<EmailOption> _optionsDefault;//直接单例,读出来就缓存,不支持数据变化,性能高--只能度默认名字
private IOptionsMonitor<EmailOption> _optionsMonitor;//只读一次,写入缓存-----但是支持数据修改,靠的是监听文件更新(onchange)数据,实时变更
private IOptionsSnapshot<EmailOption> _optionsSnapshot;//作用域注册,一次请求内数据是缓存不变的,但是不同请求是每次都会重新第一次数据
public OptionController(IOptions<EmailOption> options
, IOptionsMonitor<EmailOption> optionsMonitor
, IOptionsSnapshot<EmailOption> optionsSnapshot
, IConfiguration configuration
, ILogger<OptionController> logger)
{
this._optionsDefault = options;
this._optionsMonitor = optionsMonitor;
this._optionsSnapshot = optionsSnapshot;
this._iConfiguration = configuration;
this._logger = logger;
}
/// <summary>
/// http://localhost:5726/Option
/// </summary>
/// <returns></returns>
public IActionResult Index()
{
this._logger.LogWarning($"This is {nameof(OptionController)} Index");
//可以直接访问配置文件---但是使用的地方得知道配置文件路径
//就是IOC注入参数--很僵化
base.ViewBag.defaultEmailOption = this._optionsDefault.Value;
base.ViewBag.defaultEmailOption1 = _optionsMonitor.CurrentValue;//_optionsMonitor.Get(Microsoft.Extensions.Options.Options.DefaultName);
base.ViewBag.fromMemoryEmailOption1 = _optionsMonitor.Get("FromMemory");
base.ViewBag.fromConfigurationEmailOption1 = _optionsMonitor.Get("FromConfiguration");
base.ViewBag.fromConfigurationEmailOptionNew = _optionsMonitor.Get("FromConfigurationNew");//直接目录修改配置文件,就能看到变化
base.ViewBag.defaultEmailOption2 = _optionsSnapshot.Value;//_optionsSnapshot.Get(Microsoft.Extensions.Options.Options.DefaultName);
base.ViewBag.fromMemoryEmailOption2 = _optionsSnapshot.Get("FromMemory");
base.ViewBag.fromMemoryEmailOption2 = _optionsSnapshot.Get("FromMemory");
base.ViewBag.fromMemoryEmailOption2 = _optionsSnapshot.Get("FromMemory");//3遍都是一样的
base.ViewBag.fromConfigurationEmailOption2 = _optionsSnapshot.Get("FromConfiguration");
return View();
}
}