如何获取CascadingValueSource引用以调用NotifyChangedAsync方法?
如何获取CascadingValueSource引用并调用NotifyChangedAsync
你可以通过以下两种方案解决构建器阶段无法获取服务引用的问题,从而能调用NotifyChangedAsync方法:
方案一:用静态容器存储实例
定义一个静态类作为容器,在注册级联值时将CascadingValueSource实例存入其中,后续任何位置都能直接访问:
// 静态容器类 public static class CascadingSourceHolder { public static CascadingValueSource<Daleks>? DalekSource { get; set; } } // 服务注册时赋值 builder.Services.AddCascadingValue(sp => { var daleks = new Daleks { Units = 789 }; var source = new CascadingValueSource<Daleks>(daleks, isFixed: false); CascadingSourceHolder.DalekSource = source; return source; }); // 后续需要更新时调用 CascadingSourceHolder.DalekSource?.NotifyChangedAsync();
方案二:注册自定义服务管理引用
创建专门的服务类持有CascadingValueSource实例,将该服务注入DI容器,之后通过DI获取服务就能拿到引用:
// 自定义管理服务 public class DalekCascadingManager { public CascadingValueSource<Daleks> Source { get; } public DalekCascadingManager() { var daleks = new Daleks { Units = 789 }; Source = new CascadingValueSource<Daleks>(daleks, isFixed: false); } // 可封装更新方法,对外隐藏细节 public Task NotifyDaleksChangedAsync() { return Source.NotifyChangedAsync(); } } // 注册服务与级联值 builder.Services.AddSingleton<DalekCascadingManager>(); builder.Services.AddCascadingValue(sp => { var manager = sp.GetRequiredService<DalekCascadingManager>(); return manager.Source; }); // 在需要的地方通过DI获取服务并调用 var manager = sp.GetRequiredService<DalekCascadingManager>(); await manager.NotifyDaleksChangedAsync();
注意事项
- 如果
Daleks实例需要依赖其他服务,可在自定义管理服务的构造函数中通过DI注入,无需手动实例化。 - 确保调用
NotifyChangedAsync时,CascadingValueSource已经完成初始化。
内容的提问来源于stack exchange,提问作者MrC aka Shaun Curtis
相关产品推荐
相关产品推荐

