首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.razor中的blazor依赖项注入与.cs后面的代码不同

.razor中的blazor依赖项注入与.cs后面的代码不同
EN

Stack Overflow用户
提问于 2022-07-26 13:37:56
回答 2查看 102关注 0票数 1

有人能给我解释一下吗?

何必与

代码语言:javascript
复制
  @inject ILogger<Counter> logger

我们有

并使用

代码语言:javascript
复制
 [Inject] ILogger<Counter> logger { get ; set; }

我们有

???相同的DI系统和不同的实现?我不想在代码中添加空检查吗?谢谢和问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-26 15:36:02

当您使用look at the generated code时,Blazor只是添加了一个#nullable disable行:

代码语言:javascript
复制
@inject ILogger<Counter> logger

变成了

代码语言:javascript
复制
#nullable disable
[InjectAttribute] private ILogger<Counter> logger { get; set; }

但我不希望在我自己的代码中这样做,所以最好的实践是:

代码语言:javascript
复制
[Inject] ILogger<Counter> logger { get ; set; } = default!;
票数 3
EN

Stack Overflow用户

发布于 2022-07-26 13:57:19

剃须刀语法非常聪明,可以知道当您使用@inject服务时,它必须被解析。您不能以空变量结束-您将得到一个异常。这就是为什么你不需要使用剃须刀的零支票。

当您使用带有属性的文件后面的代码时,即使添加了[Inject]属性,C#编译器也不知道简单地添加属性可以保证属性不会包含空值。编译器不知道属性将从何处分配,甚至不知道它是否会被赋值。

简单的解决办法是说“是的编译器,我知道我在做什么”。

代码语言:javascript
复制
[Inject] ILogger<Counter> logger { get; set; } = default!;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73124441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档