Почему внедрение зависимостей IStringLocalizer выдает ошибку при выполнении - PullRequest
0 голосов
/ 09 марта 2019

Я действительно новичок в программировании ядра .net, и я столкнулся с этой проблемой, которую не могу обернуть.Решение прекрасно работает, и открывается домашняя страница, но когда я делаю какие-либо действия, например, пытаюсь войти в систему, я получаю эту ошибку: (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)'. 

ctor of AcademiejaarInst

public class AcademiejaarInst
{

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

Это также тот случай, если я пытаюсь выполнить миграцию.Очевидно, что-то не так с Локализацией, но я не знаю почему.Это соответствующие LoC в 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 Ответ

0 голосов
/ 09 марта 2019

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

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

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

до

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...