据我所知,所有这三种模式都可以在 Blazor (.net 7/C#/Razor) 项目中注入 DI 服务:
-
@inject NavigationManager NavManager
在 Razor 组件中
-
[Inject] private NavigationManager NavManager { get; set; }
在类定义中
- 典型的 DI 模式:
private readonly IMyDependency _myDependency;
public Index2Model(IMyDependency myDependency)
{
_myDependency = myDependency;
}
据我所知,它们都有效。
他们的实现有什么区别吗?使用其中任何一个或全部安全吗?
Thanks!
迪米特里斯回答的附加信息。
是的,1/2 和 3 之间是有区别的。组件的注入过程(由 Renderer 进程处理)是在 Ctor 之后运行的。您不能在 Ctor 中使用任何 DI 服务。
1 和 2 之间的区别在于可空性。
- With
@inject
,Razor 编译器禁用对该属性的可空检查。
- With
[Inject]
,需要手动处理。执行此操作的正常方法是设置default!
作为默认值。一旦你到达它就永远不会为空SetParametersAsync
正常的生命周期方法,因为运行时如果找不到服务,将在注入过程中抛出异常。
[Inject] private NavigationManager NavManager { get; set; } = default!;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)