Почему внедрение зависимостей IStringLocalizer выдает ошибку при выполнении

#c# #.net #asp.net-mvc

#c# #.net #asp.net-mvc

Вопрос:

Я действительно новичок в программировании на .net Core, и я столкнулся с этой проблемой, которую я не могу понять. Решение создается нормально, и появляется домашняя страница, но когда я выполняю какое-либо действие, например, пытаюсь войти в систему, я получаю эту ошибку: (AcademiejaarInst — это класс домена)

 InvalidOperationException: No suitable constructor found for entity type 'AcademiejaarInst'. The following constructors had parameters that could not be bound to properties of the entity type: cannot bind 'localizer' in 'AcademiejaarInst(IStringLocalizer<SharedResource> localizer)'. 
  

технический директор AcademiejaarInst

 public class AcademiejaarInst
{

    private static IStringLocalizer<SharedResource> _localizer;
    public AcademiejaarInst(IStringLocalizer<SharedResource> localizer)
    {
        _localizer = localizer;
    }
...
  

Это также имеет место, если я пытаюсь выполнить миграции. Очевидно, что что-то не так с внедрением локализации, но я не знаю почему. Это соответствующие LOCS в StartUp.cs

     public void ConfigureServices(IServiceCollection services)
    {
      ...
      services.AddMvc(config => ... )
     .AddViewLocalization(o => o.ResourcesPath = "Resources")
     .AddDataAnnotationsLocalization(options => {
                    options.DataAnnotationLocalizerProvider = (type, factory) =>
                        factory.Create(typeof(SharedResource));
                });

     // I tried this but was absolutely not sure this would work.
     services.AddTransient<AcademiejaarInst>();
     services.AddSingleton<IStringLocalizer, StringLocalizer<SharedResource>>();
     services.AddLocalization(o => o.ResourcesPath = "Resources");

     services.Configure<RequestLocalizationOptions>(options =>
     {
         var supportedCultures = new[]
         {
                    new CultureInfo("nl-BE")
         };
         options.DefaultRequestCulture = new RequestCulture("nl-BE", "nl_BE");

         options.SupportedCultures = supportedCultures;

                options.SupportedUICultures = supportedCultures;
     });
     ...
   }
  

Большое спасибо за любую помощь!

Ответ №1:

services.AddLocalization() Вызов уже подключает соответствующие реализации для интерфейса IStringLocalizer<T> , поэтому вам на самом деле не нужно вводить его самостоятельно, что, я полагаю, и является причиной ваших проблем.

Удаление строки, в которой вы вводите конкретную реализацию для IStringLocalizer интерфейса, должно решить вашу проблему.

Комментарии:

1. Услуги. У меня работает AddLocalization () (y)

Ответ №2:

В конструкторе AcademiejaarInst вы ожидаете IStringLocalizer<SharedResource> , но для этого типа нет конфигурации.

Если вы измените

 services.AddSingleton<IStringLocalizer, StringLocalizer<SharedResource>>();
  

Для

 services.AddSingleton(typeof(IStringLocalizer<SharedResource>), typeof(StringLocalizer<SharedResource));
  

это должно сработать

Комментарии:

1. Спасибо за ваш вклад, и я попробовал это, но я все еще получаю ту же ошибку…