Ошибка DI .net core bot Не удается разрешить службу - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь следовать документации Microsoft как добавить LUIS в мой бот, поэтому я создал класс BotServices и в Startup.cs добавляю его в свою коллекцию услуг

    var connectedServices = new BotServices(botConfig);
    services.AddSingleton<BotServices>(sp => connectedServices);

, а затем я внедряю его в свой MyBot класс

  public MyBot(BotServices botServices)

, но я получаю эту ошибку

System.InvalidOperationException: Unable to resolve service for type 'BotServices' while attempting to activate 'MyBot'. at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type serviceType, Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

проблема с моим кодом заключалась в том, что я зарегистрировал BotServices в вызове services.AddBot<IBot> следующим образом

Не работает:

   services.AddBot<MyBot>(options =>
       {
          var botConfig = BotConfiguration.Load(botFilePath ?? @".\MyBot.bot", secretKey);
          services.AddSingleton(sp => botConfig ?? throw new InvalidOperationException($"The .bot config file could not be loaded. ({botConfig})"));
          var connectedServices = new BotServices(botConfig);
          services.AddSingleton<BotServices>(sp => connectedServices);
       }

Я сделал это так, потому что переменная botConfig там определена по умолчанию при создании с пустым шаблоном бота, поэтому я переместил его, и он работает!(но я все еще не могу объяснить, почему это не должно работать)

Работает

      var botConfig = BotConfiguration.Load(botFilePath ?? @".\MyBot.bot", secretKey);
      services.AddSingleton(sp => botConfig ?? throw new InvalidOperationException($"The .bot config file could not be loaded. ({botConfig})"));
      var connectedServices = new BotServices(botConfig);
      services.AddSingleton<BotServices>(sp => connectedServices);
      services.AddBot<MyBot>(options =>
       {
           //all the bot configuration code
       }
0 голосов
/ 19 декабря 2018

Когда вы создаете экземпляр объекта самостоятельно, вы пытались сделать следующее:

var connectedServices = new BotServices(botConfig);
services.AddSingleton<BotServices>(connectedServices);

т.е. нет необходимости в заводской лямбде, которая есть у вас сейчас (которая подбирает локальную переменную, указывающую на ваш экземпляр)... может быть причиной проблем ...

...