RDG013: Ungültige Quellattribute
Wert | |
---|---|
Regel-ID | RDG013 |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Ursache
Diese Diagnose wird vom Anforderungsdelegat-Generator ausgegeben, wenn ein Endpunkt einen Routenhandler mit einem Parameter enthält, der eine ungültige Kombination von Dienstquellattributen enthält.
Regelbeschreibung
ASP.NET Core unterstützt das Auflösen von schlüsselbasierten Diensten und nicht schlüsselbasierten Diensten über die Dependency Injection. Es ist nicht möglich, einen Dienst als schlüsselbasiert und nicht schlüsselbasiert aufzulösen. Der folgende Code erzeugt die Diagnose und löst einen Laufzeitfehler mit derselben Meldung aus:
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();
Behandeln von Verstößen
Auflösen des Zielparameters als schlüsselbasierter oder nicht schlüsselbasierter Dienst.
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
{
}
Wann sollten Warnungen unterdrückt werden?
Diese Warnung sollte nicht unterdrückt werden. Das Unterdrücken der Warnung führt zu einer NotSupportedException-Laufzeitausnahme The FromKeyedServicesAttribute is not supported on parameters that are also annotated with IFromServiceMetadata.
.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für