如何在Blazor子组件中访问父组件注入的HttpClient服务
如何从继承父组件的子组件访问父组件注入的服务?
你的子组件已经通过@inherits ParentComponent继承了父组件,而Blazor中通过@inject指令注入的对象,编译后会生成protected级别的属性,因此子组件可以直接访问父组件中注入的Http对象,无需额外操作。
子组件使用示例
修改ChildComponent.razor代码如下:
@inherits ParentComponent <h1>Child</h1> @code{ protected override async Task OnInitializedAsync() { // 直接使用继承自父组件的Http对象 var result = await Http.GetFromJsonAsync<string>("api/example"); // 父组件中添加的"test"请求头会自动生效 } }
注意事项
- 父组件中对
Http对象的修改(比如添加请求头)会被子组件继承,因为HttpClient默认是Scoped生命周期(Blazor Server中每个用户会话一个实例,Blazor WebAssembly中全局单例),父子组件共享同一个实例。 - 不要在子组件中再次使用
@inject HttpClient Http,否则虽然能拿到同一个实例,但完全没必要,直接使用继承的属性更简洁。 - 确保父组件没有将
Http属性手动改为private,否则子组件无法访问(@inject默认生成的是protected属性,无需手动修改)。
内容的提问来源于stack exchange,提问作者Bamdad
相关产品推荐
相关产品推荐

