我有两个项目: 1. WebApi 2.共同
资源文件位于WebApi中,WebApi正在调用Common。但是,Common需要从资源文件中获取字符串。我怎么能这样做?
答案 0 :(得分:0)
我能够使用IStringLocalizerFactory来解析它来创建IStringLocalizer。以下是解决我问题的代码示例:
var assemblyName = Assembly.GetEntryAssembly().GetName().Name;
return _localizerFactory.Create("ExceptionResource", assemblyName);
答案 1 :(得分:0)
您在业务逻辑中制作了一个资源文件,您绝对不会在业务逻辑项目和网络项目之间创建依赖关系,以便能够访问您的本地化资源。
正如你所写的,关键问题是:
<块引用>"(...) 使用 IStringLocalizerFactory 解析它以创建 IStringLocalizer”。
一个现实生活中的例子,这可能是
你可以像你写的那样做,这类似于文档中的内容
这是 Damien Bod 的简短手册中的一个例子
https://damienbod.com/2017/11/01/shared-localization-in-asp-net-core-mvc/
你
sing Microsoft.Extensions.Localization;
using System.Reflection;
namespace AspNetCoreMvcSharedLocalization.Resources
{
public class LocService
{
private readonly IStringLocalizer _localizer;
public LocService(IStringLocalizerFactory factory)
{
var type = typeof(SharedResource);
var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName);
_localizer = factory.Create("SharedResource", assemblyName.Name);
}
public LocalizedString GetLocalizedHtmlString(string key)
{
return _localizer[key];
}
}
}
你实际上并不需要一个虚拟类,你也可以这样做:
using Microsoft.Extensions.Localization;
命名空间 ....Business.LocalizationService
{
public interface ILocalizationMiddleware
{
public LocalizedString GetLocalizedString(string keyForResourceTable);
}
}
using Microsoft.Extensions.Localization;
using System.Reflection;
命名空间 ....Business.LocalizationService
{
public class LocalizationMiddleware : ILocalizationMiddleware
{
private readonly IStringLocalizer localizer;
public LocalizationMiddleware(IStringLocalizerFactory factory)
{
localizer = factory.Create("SharedResource", Assembly.GetExecutingAssembly().FullName);
}
public LocalizedString GetLocalizedString(string keyForResourceTable) { return localizer[keyForResourceTable]; }
}
}