Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

483
Views
¿Cómo obtener IOptions en el método ConfigureServices?

Tengo la aplicación principal de asp.net. Quiero usar el patrón IOptions para inyectar valores de appsettings.json. Así que tengo una clase SecurityHeaderOptions y también tengo una clase objetivo SecurityHeadersBuilder cuyo constructor toma IOptions<SecurityHeaderOptions> como parámetro.

Sé que .net core puede crear implícitamente una instancia de SecurityHeadersBuilder inyectando IOptions<SecurityHeaderOptions> después de registrar ambos con el contenedor.

Sin embargo, quiero crear explícitamente una instancia de SecurityHeadersBuilder , llamar a uno de sus métodos y luego registrar la instancia con el contenedor.

 public sealed class SecurityHeaderOptions { public string FrameOption { get; set; } public string XssProtection { get; set; } } public class SecurityHeadersBuilder { private readonly SecurityHeaderOptions _options = null; public SecurityHeadersBuilder(IOptions<SecurityHeaderOptions> options) { _options = options.Value; } public SecurityHeadersBuilder AddDefaultPolicy() { AddFrameOptions(); AddConetntSecurityPolicy(); return this; } }

Método ConfigureServices

 public void ConfigureServices(IServiceCollection services) { services.Configure<SecurityHeaderOptions>(Configuration.GetSection("SecurityHeaderOptions")); services.AddScoped<SecurityHeadersBuilder>(provider => new SecurityHeadersBuilder(?????).AddDefaultPolicy()) }

Preguntas
1> Si estoy pasando opciones explícitamente al constructor, ¿necesito registrar SecurityHeaderOptions con el contenedor usando el método service.Configure ?

2> Configuration.GetSection("SecurityHeaderOptions") no puede devolver la instancia de IOptions<SecurityHeaderOptions> , sino que devuelve IConfigurationSection ?

3> De cualquier manera, ¿cómo recupero y paso SecurityHeaderOptions al constructor de SecurityHeadersBuilder ?

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Al usar .NET Core 2 y no tener un proveedor disponible (o querer agregarlo) en ConfigureServices , opté por algo como esto (usando el código OP como ejemplo):

 public void ConfigureServices(IServiceCollection services) { // secOpts available for use in ConfigureServices var secOpts = Configuration .GetSection("SecurityHeaderOptions") .Get<SecurityHeaderOptions>(); ... }
about 4 years ago · Santiago Trujillo Report

0

Así es como registro opciones y las inyecto en SecurityHeadersBuilder

 public void ConfigureServices(IServiceCollection services) { services.Configure<SecurityHeaderOptions>(Configuration.GetSection("SecurityHeaderOptions")); services.AddScoped<SecurityHeadersBuilder>(provider => { var option = provider.GetService<IOptions<SecurityHeaderOptions>>(); return new SecurityHeadersBuilder(option) .AddDefaultPolicy(); }); }
about 4 years ago · Santiago Trujillo Report

0

Los documentos dicen específicamente:

No use IOptions<TOptions> o IOptionsMonitor<TOptions> en Startup.ConfigureServices . Puede existir un estado de opciones inconsistente debido al orden de los registros de servicio.

Por lo tanto, deberá acceder a la configuración de alguna otra manera desde Startup.ConfigureServices , por ejemplo, la respuesta de Quinton

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!