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

如何在Razor文件中正确注入服务?为何需同时用@inject与@using?

Blazor注入服务需@using的问题解答

问题描述

我已在Startup.cs的ConfigureServices方法中完成服务注册:

public void ConfigureServices(IServiceCollection services)
{
    if (Environment.IsDevelopment())
    {
        EstablishDbContext(services, "DevelopmentConnection");
        AddVOMApi(services, "AuthorizationStringsDevelopment");
    }
    else
    {
        EstablishDbContext(services, "ProductionConnection");
        AddVOMApi(services, "AuthorizationStringsProduction");
        throw new NotImplementedException("The production environment has not been implemented.");
    }

    services.AddRazorPages();
    services.AddServerSideBlazor();   
    services.AddTransient<VomConnection, VomConnection>();
    services.AddTransient<IImportInternalHelper, ImportInternalHelper>();
}

在Razor文件注入服务时,我的IDE(Jetbrains Rider)会自动添加类路径的@using语句:

@using Presentation.WebUI.Shared.Components
@using Presentation.WebUI.Shared.Components.Tables
@using Infrastructure.AdapterService.VOM
@using Application.HelperClasses
@inject VomConnection _Vom;
@inject IImportInternalHelper _helper;

但Blazor文档显示仅需@inject即可,无需@using。我的代码可运行,但删除@using后注入失效,请问问题出在哪?我尝试多种方式,IDE始终添加@using。

问题原因与解决方法

  1. 文档的前提你没注意到
    Blazor文档说的“仅需@inject”是建立在服务类所在命名空间已被全局导入的基础上。如果你的服务类型(比如VomConnection、IImportInternalHelper)不在Blazor默认导入的命名空间里,Razor页面根本找不到这些类型,自然无法完成注入,必须显式通过@using导入命名空间。

  2. IDE自动加@using是正常行为
    Rider检测到你引用的类型不在当前页面的已导入命名空间中,自动补全@using是为了让代码能正常编译,这是IDE的语法提示机制,不是错误。

  3. 两种解决方式

  • 全局导入命名空间(推荐)
    在项目根目录的_Imports.razor文件中添加服务类所在的命名空间:
    @using Infrastructure.AdapterService.VOM
    @using Application.HelperClasses
    
    这样所有Razor页面都能直接识别这些类型,无需每个页面单独加@using,就能实现文档里“仅需@inject”的效果。
  • 保留页面级@using
    如果不想全局导入,那每个用到这些服务的Razor页面必须保留对应的@using,否则编译器找不到类型,注入必然失效。
  1. 额外说明
    Startup里注册服务只是把服务加入DI容器,但Razor页面要使用这些服务,首先得能识别服务的类型——这是C#的基础语法要求,和Blazor的DI机制是两个独立的环节,别混淆了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:55:32