在ASP.net核心应用的强类型配置类中使用System.Uri

时间:2019-04-17 10:34:40

标签: c# asp.net-core

在我们的AspNetCore 2.2应用中,我们在配置节中使用了强类型的类, 遵循模式:

public static IServiceCollection AddMyConfigSettings(this IServiceCollection services, IConfiguration configuration)
{
    MyConfigSettings myConfigSettings = new MyConfigSettings();
    configuration.Bind("MyConfig", myConfigSettings);
    services.AddSingleton(myConfigSettings);
    return services;
}

现在MyConfigSettings类看起来像这样:

public class MyConfigSettings
{
    #pragma warning disable CA1056 // Uri properties should not be strings      
    public string HostUrl { get; set; }
}

是否有一种简单的方法可以使用System.Uri代替System.String作为HostUrl的类型,这样我们就不必取消Roslyn分析器警告CA1056了?

1 个答案:

答案 0 :(得分:2)

将属性从string更改为Uri

public class MyConfigSettings {        
    public Uri HostUrl { get; set; }
}

绑定应负责其余的工作。

您还可以像这样绑定到对象图

public static IServiceCollection AddMyConfigSettings(this IServiceCollection services, IConfiguration configuration) {
    MyConfigSettings myConfigSettings = configuration.GetSection("MyConfig").Get<MyConfigSettings>();
    services.AddSingleton(myConfigSettings);
    return services;
}
  

ConfigurationBinder.Get<T>绑定并返回指定的类型。 Get<T>比使用Bind更方便。

前面的代码演示了如何在您的示例中使用Get<T>,该示例允许将绑定的实例直接分配给该属性。

引用Configuration in ASP.NET Core: Bind to an object graph

相关问题