文章目录
- 前言
- 依赖注入特性
- 需求
- 解决方案
- 示意图
前言
依赖注入我之前写过一篇文章,没看过的可以看看这个。
C# Blazor 学习笔记(10):依赖注入
依赖注入特性
- 只能Razor组件中注入
- 所有Razor组件在作用域注入的都是同一个依赖。作用域可以看看我之前的文章。
需求
Razor组件关系
- Main:主页面
- TreeItem(多个):树节点
我想让主逻辑写在Main里面,组件只做最简单的交互。所有的点击事件都以回调的形式。
解决方案
在Service中声明回调
/// <summary>
/// 节点回调状态
/// </summary>
public enum T_JointState
{Add,Delete,Up,Down,Update
}/// <summary>
/// 节点添加回调
/// </summary>
public Action<int, T_JointState> CallBack { get; set; }
在子组件中使用回调
///注入依赖[Inject]private JointService jointService { get; set; }[Parameter]public int Index { get; set; }public void AddBtn(){MessageService.ShowMsg("添加");jointService.CallBack(Index,T_JointState.Add);}public void DeleteBtn(){MessageService.ShowMsg("删除");jointService.CallBack(Index, T_JointState.Delete);}public void UpBtn(){MessageService.ShowMsg("上移");jointService.CallBack(Index, T_JointState.Up);}public void DownBtn(){MessageService.ShowMsg("下移");jointService.CallBack(Index, T_JointState.Down);}public void EditBtn(){MessageService.ShowMsg("编辑");jointService.CallBack(Index, T_JointState.Update);}
在父组件中设置回调
[Inject]
private JointService jointService { get; set; }protected override void OnAfterRender(bool firstRender){if (firstRender){jointService.CallBack = JointNodeCallBack;StateHasChanged();}base.OnAfterRender(firstRender);}/// <summary>/// 设置回调函数/// </summary>/// <param name="index"></param>/// <param name="state"></param>public void JointNodeCallBack(int index,T_JointState state){MessageService.ShowMsg("回调成功!");}