Я довольно плохо знаком с ядром .net и хочу реализовать локализацию в своем приложении. Встроенный сервис ResourceManagerStringLocalizer удовлетворяет почти всем моим требованиям и отлично работает из коробки, но я хочу добавить к нему некоторые пользовательские функции, не копируя и не вставляя весь код класса и не добавляя его вмой собственный локализатор. В настоящее время я пытался извлечь из класса в моем собственном Localizer и внедрить это как мой IStringLocalizer:
services.AddTransient<IStringLocalizer<MyApp.SharedResource>, MyLocalizer<MyApp.SharedResource>>();
...
public class MyLocalizer<T> : ResourceManagerStringLocalizer, IStringLocalizer<T> {
public MyLocalizer(ResourceManager resourceManager, IResourceStringProvider resourceStringProvider, string baseName, IResourceNamesCache resourceNamesCache, ILogger logger) : base(resourceManager, resourceStringProvider, baseName, resourceNamesCache, logger) {
}
public override LocalizedString this[string name] {
get {
//do some custom functionality
return base[name];
}
}
public override LocalizedString this[string name, params object[] arguments] {
get {
//do some custom functionality
return base[name, arguments];
}
}
}
Но это дает следующее исключение при попытке использоватьit:
System.InvalidOperationException: 'Unable to resolve service for type 'System.Resources.ResourceManager' while attempting to activate 'MyApp.Services.MyLocalizer`1[MyApp.SharedResource]'.'
Мой вопрос: как лучше всего это сделать? И как лучше всего делать такие вещи? Я чувствую, что подобные вещи могут появиться чаще в будущем этого приложения, и вся помощь будет оценена.