Asp.net core .Resx文件在.cs文件中使用时为空

Asp.net core .Resx文件在.cs文件中使用时为空,asp.net-core,Asp.net Core,我正在尝试从.resx文件读取数据。它在视图中运行良好,但在.cs中使用时遇到问题 我收到以下运行时错误: 对象引用未设置为对象的实例 MailComposer.cs IStringLocalizer<SharedResources> SharedLocalizer; public void SendActivityCreated (Activity entity) { var path = Path.Combine (environment.Co

我正在尝试从.resx文件读取数据。它在视图中运行良好,但在.cs中使用时遇到问题

我收到以下运行时错误:

对象引用未设置为对象的实例

MailComposer.cs

    IStringLocalizer<SharedResources> SharedLocalizer;


public void SendActivityCreated (Activity entity) {
            var path = Path.Combine (environment.ContentRootPath, "wwwroot", "mail_templates", "activity_created", "index.html");
            var template = File.ReadAllText (path);
            template = template.Replace ("##ID##", entity.ID.ToString ());
            var x = SharedLocalizer["NewActivity"]; // Getting "Object reference not set to an instance of an object" here
            var title = $"Platform.Ge - {x} #{entity.ID}";
            var responsibleEmail = template.Replace ("##USER##", entity.Responsible.Name);
            emailSender.SendEmailAsync (entity.Responsible.Email, title, responsibleEmail);

        }
IStringLocalizer共享定位器;
已创建公共无效SendActivityCreated(活动实体){
var path=path.Combine(environment.ContentRootPath、“wwwroot”、“邮件模板”、“创建的活动”、“index.html”);
var template=File.ReadAllText(路径);
template=template.Replace(“##ID###”,entity.ID.ToString());
var x=SharedLocalizer[“NewActivity”];//在此处获取“对象引用未设置为对象的实例”
var title=$“Platform.Ge-{x}{entity.ID}”;
var responsibleEmail=template.Replace(“##用户###”,entity.Responsible.Name);
emailSender.SendEmailAsync(entity.Responsible.Email,title,responsibleEmail);
}
Startup.cs

services.Configure<RequestLocalizationOptions> (opts => {
    var supportedCultures = new [] {
    new CultureInfo ("en"),
    new CultureInfo ("ka"),
    new CultureInfo ("ru")
    };

    opts.DefaultRequestCulture = new RequestCulture ("ka");
    // Formatting numbers, dates, etc.
    opts.SupportedCultures = supportedCultures;
    // UI strings that we have localized.
    opts.SupportedUICultures = supportedCultures;
  });
services.Configure(选项=>{
var supportedCultures=new[]{
新文化信息(“en”),
新文化信息(“ka”),
新文化信息(“ru”)
};
opts.DefaultRequestCulture=新的RequestCulture(“ka”);
//格式化数字、日期等。
opts.SupportedCultures=SupportedCultures;
//我们已经本地化的UI字符串。
opts.supporteduccultures=支持的文化;
});
我有SharedResources.ka.resx和SharedResources.en.resx文件。如何从MailComposer.cs的SharedLocalizer实例中的这两个文件中获取数据?

解决方案1:

MailComposer.cs
中注入
SharedResources

IStringLocalizer<SharedResource> SharedLocalizer;

public MailComposer(IStringLocalizer<SharedResource> _SharedLocalizer)
{
    SharedLocalizer = _SharedLocalizer;
}
services.AddScoped<MailComposer>();
IStringLocalizer<SharedResource> SharedLocalizer;

public MailComposer(IStringLocalizer<SharedResource> _SharedLocalizer)
{
    SharedLocalizer = _SharedLocalizer;
}
MailComposer
插入要调用
SendActivityCreated
函数的位置:

private readonly MailComposer _mailComposer;
public  HomeController(MailComposer mailComposer){

    _mailComposer = mailComposer;
}
private readonly IStringLocalizer<SharedResource> _localizer;
public  HomeController(IStringLocalizer<SharedResource> localizer){

    _localizer = localizer;
}
并使用类似于:

_mailComposer.SendActivityCreated(entity);
MailComposer a = new MailComposer(_localizer);
a.SendActivityCreated(entity);
解决方案2:

MailComposer.cs
中注入
SharedResources

IStringLocalizer<SharedResource> SharedLocalizer;

public MailComposer(IStringLocalizer<SharedResource> _SharedLocalizer)
{
    SharedLocalizer = _SharedLocalizer;
}
services.AddScoped<MailComposer>();
IStringLocalizer<SharedResource> SharedLocalizer;

public MailComposer(IStringLocalizer<SharedResource> _SharedLocalizer)
{
    SharedLocalizer = _SharedLocalizer;
}
并使用类似于:

_mailComposer.SendActivityCreated(entity);
MailComposer a = new MailComposer(_localizer);
a.SendActivityCreated(entity);