有人能给我解释一下吗?
何必与
@inject ILogger<Counter> logger我们有

并使用
[Inject] ILogger<Counter> logger { get ; set; }我们有

???相同的DI系统和不同的实现?我不想在代码中添加空检查吗?谢谢和问候
发布于 2022-07-26 15:36:02
当您使用look at the generated code时,Blazor只是添加了一个#nullable disable行:
@inject ILogger<Counter> logger变成了
#nullable disable
[InjectAttribute] private ILogger<Counter> logger { get; set; }但我不希望在我自己的代码中这样做,所以最好的实践是:
[Inject] ILogger<Counter> logger { get ; set; } = default!;发布于 2022-07-26 13:57:19
剃须刀语法非常聪明,可以知道当您使用@inject服务时,它必须被解析。您不能以空变量结束-您将得到一个异常。这就是为什么你不需要使用剃须刀的零支票。
当您使用带有属性的文件后面的代码时,即使添加了[Inject]属性,C#编译器也不知道简单地添加属性可以保证属性不会包含空值。编译器不知道属性将从何处分配,甚至不知道它是否会被赋值。
简单的解决办法是说“是的编译器,我知道我在做什么”。
[Inject] ILogger<Counter> logger { get; set; } = default!;https://stackoverflow.com/questions/73124441
复制相似问题