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

如何在无依赖注入的普通类中读取ASP.NET Core资源文件?

在ASP.NET Core中直接访问资源文件的方法

可以直接访问资源文件,无需通过依赖注入传递服务,实现方式和WinForms类似,直接调用自动生成的资源类即可。

具体实现步骤

  1. 确保你的resources.resx文件的自定义工具设置为ResXFileCodeGenerator(右键文件→属性→自定义工具),系统会自动生成对应的C#资源类(默认类名为Resources)。
  2. 在SignupModel类中直接调用该资源类的属性获取文本:

修改后的代码示例:

public class SignupModel
{
    private readonly ExIdentityUser _identityUser;
    private readonly Signup _signup;

    public string UserName => _signup.User.Name;

    public string UserEmail => _identityUser.Email!;

    public string UserPhoneFormatted => _identityUser.FormattedPhoneNumber!;

    public string UserPhoneE164 => _identityUser.PhoneNumber!;

    public string Commitment { get; }

    public SignupModel(Effort parent, Signup signup, List<ExIdentityUser> listIdentityUsers)
    {
        ArgumentNullException.ThrowIfNull(signup.User);
        var @event = parent as Event;
        if (@event != null)
            ArgumentNullException.ThrowIfNull(@event.Hosts, nameof(@event.Hosts));

        _identityUser = listIdentityUsers.First(user => user.Id == signup.User.IdentityUsersId);
        _signup = signup;
        if (@event != null && @event.Hosts!.Any(host => host.Id == _signup.User.Id))
        {
            Trap.Break();
            Commitment = Resources.Hosting; // 直接调用资源类获取文本
        }
        else
            Commitment = signup.Commitment == Signup.Mode.Interested 
                ? Resources.Interested 
                : Resources.Attending;
    }
}

注意事项

  • 资源类的命名空间要与SignupModel匹配,或者手动添加using引入对应命名空间。
  • 如果有多语言资源文件(如resources.en.resx、resources.zh.resx),ASP.NET Core会自动根据当前请求的文化信息匹配对应资源,直接调用Resources.xxx即可生效。
  • 这种方式适合数据模型、纯工作类等无需依赖注入的场景,避免了为获取资源而强行注入服务的冗余代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:53:14