如何在无依赖注入的普通类中读取ASP.NET Core资源文件?
在ASP.NET Core中直接访问资源文件的方法
可以直接访问资源文件,无需通过依赖注入传递服务,实现方式和WinForms类似,直接调用自动生成的资源类即可。
具体实现步骤
- 确保你的
resources.resx文件的自定义工具设置为ResXFileCodeGenerator(右键文件→属性→自定义工具),系统会自动生成对应的C#资源类(默认类名为Resources)。 - 在
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
相关产品推荐
相关产品推荐

