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

Blazor中如何将HelperClass注入到PrintShopAttachment与Attachment类

Blazor单例服务共享变量解决方案

你已经将HelperClass注册为单例服务,要在PrintShopAttachment.cs和Attachment.cs中实现依赖注入并共享变量,分两种场景处理:

场景1:两个类是Blazor组件(.razor 文件)

方法1:使用@inject指令直接注入

在组件文件顶部添加注入指令,注意引入HelperClass所在的命名空间:

@using YourProjectNamespace // 替换为HelperClass实际所在的命名空间
@inject HelperClass HelperInstance

之后就能在组件的HTML或代码块中直接使用HelperInstance操作变量:

<button @onclick="UpdateValue">修改布尔值</button>

@code {
    private void UpdateValue()
    {
        HelperInstance.HelperClassBoolF = true;
    }
}

方法2:代码后置文件构造函数注入

如果使用.razor.cs代码分离模式,确保类继承ComponentBase,通过构造函数接收注入实例:

using Microsoft.AspNetCore.Components;
using YourProjectNamespace;

public class PrintShopAttachmentBase : ComponentBase
{
    private readonly HelperClass _helper;

    // DI容器自动注入单例HelperClass实例
    public PrintShopAttachmentBase(HelperClass helper)
    {
        _helper = helper;
    }

    public void SetHelperValue()
    {
        _helper.HelperClassBoolT = false;
    }
}

场景2:两个类是普通C#类(非Blazor组件)

普通类无法使用@inject,必须通过构造函数注入,同时确保类本身被DI容器管理:

  1. 在普通类中通过构造函数接收HelperClass:
using YourProjectNamespace;

public class PrintShopAttachment
{
    private readonly HelperClass _helper;

    public PrintShopAttachment(HelperClass helper)
    {
        _helper = helper;
    }

    public void UpdateHelperVars()
    {
        _helper.HelperClassBoolF = true;
    }
}
  1. 在Startup.cs中注册这个普通类(按需选择生命周期,比如Scoped/Singleton):
services.AddScoped<PrintShopAttachment>();

之后在其他需要使用该类的地方(比如组件或其他服务),同样通过构造函数注入PrintShopAttachment即可,DI会自动传递HelperClass的单例实例。

解决@符号无自动补全问题

  1. 确保组件中已通过@using引入HelperClass的命名空间;
  2. 重新编译项目,或重启IDE(VS/Rider)触发智能感知更新;
  3. 检查Startup.cs中services.AddSingleton<HelperClass>()是否正确添加,没有语法错误。

验证共享效果

因为HelperClass是单例服务,所有注入的实例都是同一个对象。在PrintShopAttachment中修改的变量值,会实时同步到Attachment中读取的实例上。

内容的提问来源于stack exchange,提问作者JohnHibbs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:01:27