RDG013: Atributos de origen no válidos
Valor | |
---|---|
Identificador de la regla | RDG013 |
La corrección es problemática o no problemática | Poco problemático |
Causa
El Generador de delegados de solicitudes emite este diagnóstico cuando un punto de conexión contiene un controlador de ruta con un parámetro que contiene una combinación no válida de atributos de origen de servicio.
Descripción de la regla
ASP.NET Core admite la resolución de servicios con clave y sin clave a través de la inserción de dependencias. No es factible resolver un servicio como con clave y sin clave. El código siguiente genera el diagnóstico y produce un error en tiempo de ejecución con el mismo mensaje:
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateSlimBuilder(args);
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.TypeInfoResolverChain.Insert(0,
AppJsonSerializerContext.Default);
});
builder.Services.AddKeyedSingleton<IService, FizzService>("fizz");
var app = builder.Build();
app.MapGet("/fizz", ([FromKeyedServices("fizz")][FromServices] IService service) =>
{
return Results.Ok(service.Echo());
});
app.Run();
Cómo corregir infracciones
Resuelva el parámetro de destino como un servicio con clave o sin clave.
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateSlimBuilder(args);
builder.Services.ConfigureHttpJsonOptions(options =>
{
options.SerializerOptions.TypeInfoResolverChain.Insert(0,
AppJsonSerializerContext.Default);
});
builder.Services.AddKeyedSingleton<IService, FizzService>("fizz");
builder.Services.AddKeyedSingleton<IService, BuzzService>("buzz");
builder.Services.AddSingleton<IService, FizzBuzzService>();
var app = builder.Build();
app.MapGet("/fizz", ([FromKeyedServices("fizz")] IService service) =>
{
return Results.Ok(service.Echo());
});
app.MapGet("/buzz", ([FromKeyedServices("buzz")] IService service) =>
{
return Results.Ok(service.Echo());
});
app.MapGet("/fizzbuzz", ([FromServices] IService service) =>
{
return Results.Ok(service.Echo());
});
app.Run();
public interface IService
{
string Echo();
}
public class FizzService : IService
{
public string Echo() => "Fizz";
}
public class BuzzService : IService
{
public string Echo() => "Buzz";
}
public class FizzBuzzService : IService
{
public string Echo()
{
return "FizzBuzz";
}
}
[JsonSerializable(typeof(string[]))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}
Cuándo suprimir las advertencias
Esta advertencia no debe suprimirse. La supresión de la advertencia conduce a una excepción NotSupportedException en tiempo de ejecución The FromKeyedServicesAttribute is not supported on parameters that are also annotated with IFromServiceMetadata.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de