Состояния MS Четко выразите свое намерение в дизайне с помощью допустимых и ненулевых ссылочных типов .
Я намерен выразить, что свойства Issuer
и Audience
в моем JwtOptions
никогда не равны нулю.Что является очень разумным намерением для потребителей этих вариантов, не так ли?Эти ненулевые значения обеспечиваются проверкой ядра Asp.Net, описанной ниже.
Но если JwtOptions
имеет не все свойства, инициализированные конструктором, значит, компилятор C # 8 сообщает
Предупреждение CS8618 Не обнуляемое свойство Issuer не инициализировано.
И по некоторым техническим причинам в параметрах Asp.Net Core не может быть конструктора с параметрами.Так что я застрял с моим намерением.Я могу отключить проверку Nullable или объявить Issuer
и другие свойства Nullable, но я думаю, что это не лучшее решение.
Есть ли какое-нибудь элегантное решение в этом случае?
Фрагмент из csproj:
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>
У меня есть строго типизированные параметры в приложении Asp.Net Core:
public class JwtOptions
{
[Required]
public string Issuer { get; set; }
[Required]
public string Audience { get; set; }
}
Параметры настраиваются следующим кодом в Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddOptions<JwtOptions>()
.Bind(Configuration.GetSection("JwtOption"))
.ValidateDataAnnotations();
}
и используются HomeController
:
public HomeController(IOptions<JwtOptions> options)
{
string audience = options.Value.Audience;
string issuer = options.Value.Issuer;
}
Как видите, ни Audience
или Issuer
не могут быть нулевыми для потребителя.Делать эти свойства обнуляемыми не имеет смысла.