首页 > 解决方案 > 是否有内置方法可以在没有 IOptions 的情况下进行配置模型绑定验证?

问题描述

我知道用这个可以做到

services.AddOptions<MyConfigModel>()
        .Bind(Configuration.GetSection(nameof(MyConfigModel)))
        .ValidateDataAnnotations();

但我不喜欢通过 option.Value.xxx 访问。

我更喜欢:

var myconfig = new MyConfigModel();
Configuration.Bind(nameof(MyConfigModel), myconfig);   

services.AddSingleton(myconfig);

标签: c#asp.net-core.net-core

解决方案


为了避免 resolve MyConfigModelby IOptions<MyConfigModel>.Value,您可以尝试MyConfigModel像这样 注册

services.AddOptions<MyConfigModel>()
    .Bind(Configuration.GetSection(nameof(MyConfigModel)))
    .ValidateDataAnnotations();
services.AddScoped(serviceProvider => serviceProvider.GetRequiredService<IOptions<MyConfigModel>>().Value);

然后像这样使用

public class HomeController : Controller
{       
    private readonly MyConfigModel _myConfigModel2;
    public HomeController(MyConfigModel myConfigModel)
    {
        _myConfigModel2 = myConfigModel;
    }              
}

推荐阅读