Используйте System.Uri в строго типизированном классе конфигурации для основного приложения ASP.net - PullRequest
2 голосов
/ 17 апреля 2019

В нашем приложении 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 Ответ

2 голосов
/ 17 апреля 2019

Измените свойство с 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> с вашим примером, который позволяет привязать экземпляр напрямую к свойству.

Ссылка Конфигурация в ASP.NET Core: привязка к графу объектов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...