Blazor Wasm代码后置(.razor.cs)文件支持构造函数注入吗?
Blazor组件依赖注入:构造函数vs属性注入
构造函数注入能用吗?
能用,但有严格的前提限制,而且不是Blazor组件的常规用法。
Blazor组件的实例化逻辑和普通服务不一样:
- 咱们平时写的Razor组件(包括代码后置的partial类),不管是页面还是子组件,默认都是Blazor用无参构造函数创建实例,之后再完成属性注入。
- 要想用构造函数注入,得满足两个条件:
- 把组件像服务一样注册到DI容器里,比如在
Program.cs里加builder.Services.AddScoped<MyComponent>() - 组件不能直接用
<MyComponent />的方式渲染,必须通过DI获取实例(比如父组件里用@inject MyComponent MyComp,或者代码里通过IServiceProvider拿)
- 把组件像服务一样注册到DI容器里,比如在
这种方式会把组件的生命周期和DI绑定死,没法像普通组件那样灵活使用,官方也明确推荐属性注入作为组件的标准注入方式,适配Blazor的渲染流程。
属性注入的命名必须和类型一致?
当然不是!你完全可以用_navigationManager这种下划线开头的私有属性命名,只要给属性加上[Inject]特性就行,比如:
public partial class MyComponent : IDisposable { [Inject] private ILogger<MyComponent> _logger { get; set; } [Inject] private NavigationManager _navigationManager { get; set; } // ... 业务代码 }
平时看到的NavigationManager这种和类型同名的写法,只是一种约定俗成的风格,不是语法强制要求。你完全可以保持自己的命名习惯,用下划线开头的私有属性,既符合依赖注入的字段命名惯例,又能保证代码一致性,完全没问题。
内容的提问来源于stack exchange,提问作者zola25
相关产品推荐
相关产品推荐

