Как внедрить «TeamSpecificConversationState», «DropNonTeamsActivitiesMiddleware» и «TeamsMiddleware» в бот с помощью autofac в .NET Framework - PullRequest
0 голосов
/ 25 сентября 2019

Я новичок в разработке MS Bot.Я пытаюсь разработать бота MS Teams с помощью веб-API и автозапуска в .NET Framework.Как пример кода MS, бот может работать как обычный бот.Теперь я хочу использовать его только в деятельности Команд и разговорах, а не в личной жизниВ качестве предварительной версии .Net Teams Bot Builder v4 SDK , TeamSpecificConversationState, DropNonTeamsActivitiesMiddleware, DropChatActivitiesMiddleware и TeamsMiddleware можно использовать в моем случае разработки.Но я не могу хорошо использовать autofac и Bot Frameworkv4.Ниже приведен мой код:

    //setting Bot data store policy to use last write win
    //example if bot service got restarted, existing conversation would just overwrite data to store
    public static class BotConfig
    {
        public static void Register(HttpConfiguration config)
        {
            var builder = new ContainerBuilder();
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

            // The ConfigurationCredentialProvider will retrieve the MicrosoftAppId and
            // MicrosoftAppPassword from Web.config
            builder.RegisterType<ConfigurationCredentialProvider>().As<ICredentialProvider>().SingleInstance();

            // Create the Bot Framework Adapter with error handling enabled.
            builder.RegisterType<AdapterWithErrorHandler>().As<IBotFrameworkHttpAdapter>().SingleInstance();


            // The Memory Storage used here is for local bot debugging only. When the bot
            // is restarted, everything stored in memory will be gone.
            IStorage dataStore = new MemoryStorage();

            //// Create Conversation State object.
            //// The Conversation State object is where we persist anything at the conversation-scope.
            //TeamSpecificConversationState conversationState = new TeamSpecificConversationState(dataStore);
            //builder.RegisterInstance(conversationState).As<TeamSpecificConversationState>().SingleInstance();
            var conversationState = new ConversationState(dataStore);

            //// Drop all activites not received from Microsoft Teams channel.
            //builder.RegisterType<DropNonTeamsActivitiesMiddleware>().As<IMiddleware>().SingleInstance();

            //// For TeamContext object, Add Teams Middleware
            //builder.Register(c => new TeamsMiddleware(
            //   new ConfigurationCredentialProvider())).As<IMiddleware>().SingleInstance();

            //// Automatically drop all non Team messages.
            //builder.RegisterType<DropChatActivitiesMiddleware>().As<IMiddleware>().SingleInstance();

            builder.RegisterInstance(conversationState).As<ConversationState>().SingleInstance();


            // Register the NextLabsBot as the IBot interface
            builder.RegisterType<myBot>().As<IBot>();

            var container = builder.Build();
            var resolver = new AutofacWebApiDependencyResolver(container);
            config.DependencyResolver = resolver;
        }
    }

код без комментариев может работать как обычный бот, он исходит от MS.

код, закомментированный как «//», является моей попыткой, но он не может работать.

код, комментируемый '////' - это использование SDK и некоторые примечания к моей мысли.

Что можно сделать, чтобы завершить его.Спасибо!

1 Ответ

0 голосов
/ 27 сентября 2019

Не регистрируйте бота и внедряйте промежуточное ПО через AddBot.Вы должны внедрить свой собственный IBot (который вы уже делаете) и добавить промежуточное ПО через адаптер.

Вот правильный пример .

Это ядро ​​dotnet, однако, покатак как вы используете V4 SDK, шаблон должен быть таким же.Пример из официального github выглядит устаревшим.

Для получения дополнительной информации см. Мое обсуждение с ними на github .

...