Tipo de sequência não anulável, como usar com as opções do Asp.Net Core
MS states Expresse sua intenção de design com mais clareza com os tipos de referência nulos e não nul.
Minha intenção é expressar que essas propriedadesIssuer
eAudience
no meuJwtOptions
nunca são nulos. Qual é a intenção muito razoável para os consumidores dessas opções, não é? Esses valores não nulos são garantidos pela validação do Asp.Net Core descrita abaix
Mas seJwtOptions
não possui todas as propriedades inicializadas pelo construtor, portanto, o compilador C # 8 relata
Warning CS8618 A propriedade não anulável 'Emissor' não foi inicializad
Por algumas razões técnicas, as opções do Asp.Net Core não podem ter um construtor com parâmetros. Então, eu estou preso com a minha intenção. Posso desativar a verificação anulável ou declararIssuer
e outras propriedades anuláveis, mas acho que essa não é a melhor soluçã
Existe alguma solução elegante nesse caso?
Snippet de csproj:
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<LangVersion>8.0</LangVersion>
<NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>
Tenho essas opções fortemente digitadas no aplicativo Asp.Net Core:
public class JwtOptions
{
[Required]
public string Issuer { get; set; }
[Required]
public string Audience { get; set; }
}
Options são configurados por um próximo código em Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddOptions<JwtOptions>()
.Bind(Configuration.GetSection("JwtOption"))
.ValidateDataAnnotations();
}
e consumido porHomeController
:
public HomeController(IOptions<JwtOptions> options)
{
string audience = options.Value.Audience;
string issuer = options.Value.Issuer;
}
Como você pode ver, nemAudience
nemIssuer
não pode ser nulo para o consumidor. Tornar essas propriedades anuláveis não faz sentid