RDG013:源属性无效
值 | |
---|---|
规则 ID | RDG013 |
修复是中断修复还是非中断修复 | 非中断 |
原因
当终结点包含的路由处理程序的参数包含服务源属性的无效组合时,请求委托生成器会发出此诊断。
规则说明
ASP.NET Core 支持通过依赖项注入解析密钥和非密钥服务。 将服务同时解析为键捡控和非键控服务是不可行的。 以下代码生成诊断并引发运行时错误,显示相同的消息:
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();
如何解决冲突
将目标参数解析为键控或非键控服务。
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
{
}
何时禁止显示警告
不应抑制此警告。 禁止显示警告会导致 NotSupportedException 运行时异常 The FromKeyedServicesAttribute is not supported on parameters that are also annotated with IFromServiceMetadata.
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈