You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:23:15