Как запустить несколько файлов класса c # - PullRequest
0 голосов
/ 02 июня 2019

У меня есть эти три файла классов, над которыми я работаю в среде бота. Но когда я запускаю свой проект в эмуляторе бота, запускаются только диалоги файла WelcomeDialog, а другим файлам не нравится, если я говорю "привет", которыйэто из файла WelcomeDialog Я получаю соответствующее сообщение в эмуляторе, но если произнесите «Искать мне» что-то из поиска Bing, ответ эмулятора, я не могу понять, извините, я не знаю, проблема в файле контроллера сообщений или чтоодновременно работает только один файл cs

    WelcomeDialog .cs


 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Connector;
using Microsoft.Azure.CognitiveServices.Search;
namespace MyFYP.Dialogs
{
    [Serializable]   //As bot framework serilaizes and deserializes dialogs
    public class WelcomeDialog : IDialog<object>
    {
        public Task StartAsync(IDialogContext context)
        {

            context.Wait(PerformActionAsync);     // calling PerformActionAsync
            return Task.CompletedTask;
        }
        public async Task PerformActionAsync(IDialogContext context, IAwaitable<object> result)
        {          //method
            var activity = await result as Activity;
            if (activity.Text.Equals("Hello") || activity.Text.Equals("Hi") || activity.Text.Equals("hi") || activity.Text.Equals("hii"))
            {
                await context.PostAsync("Welcome to the Chatbot Portal of LMS");
            }
            else if (activity.Text.Equals("How are you"))
                await context.PostAsync("I am doing well AlhamdULLILAH what I can do for you");
            else if (activity.Text.Equals("what can you do") || activity.Text.Equals("What services you provide"))
                await context.PostAsync("i CAN OFFER A COUPLE OF SERVICES ");
            else await context.PostAsync("I am unable to understand you");
        }
    }



}

BingSearch.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading;
    using System.Threading.Tasks;
    using Microsoft.Bot.Builder.Dialogs;
    using Microsoft.Bot.Builder;
    using Microsoft.Bot.Connector;
    using Microsoft.Azure.CognitiveServices.Search;
    namespace MyFYP.Dialogs
    {
        [Serializable]   //As bot framework serilaizes and deserializes dialogs
        public class BingSearch : IDialog<object>
        {
            private string searchtype = string.Empty;
            private string query = string.Empty;
            private const string BING_KEY = "3b681ec3e2ed47f3930493d261a28e6d";
            private const string searchWeb = "Search Web";
            public Task StartAsync(IDialogContext context)
            {

                context.Wait(MessageActionAsync);     // calling PerformActionAsync
                return Task.CompletedTask;
            }
            private async Task MessageActionAsync(IDialogContext context, IAwaitable<object> result)
            {          //method
                var activity = await result as Activity;
                if (activity.Text.Equals("Search me something") || activity.Text.Equals("i want some material"))
                {
                    PromptDialog.Choice(
                        context: context,
                        resume: ResumeAfterSearchTypeSelecting,
                        prompt: "Select searcht type you want to perform",
                        options: new List<string>
                        {
                            searchWeb
                        }
                        );
                }
            }
            private async Task ResumeAfterSearchTypeSelecting(IDialogContext context, IAwaitable<string> result)
            {
                searchtype = (await result) as string;
                PromptDialog.Text(
                        context: context,
                        resume: ResumeAfterEnteringQuery,
                        prompt: "Enter your query"
                        );
            }
            private async Task ResumeAfterEnteringQuery(IDialogContext context, IAwaitable<string> result)
            {
                query = (await result) as string;
                switch (searchtype)
                {
                    case searchWeb:
                        {
                            await BingSearchHelper.SearchWebAsync(context, BING_KEY, query);
                            break;
                        }

                }
                context.Wait(MessageActionAsync);
            }

        }
    }

BingSearchHelper.cs

    using System.Web;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading;
    using System.Threading.Tasks;
    using Microsoft.Bot.Builder.Dialogs;
    using Microsoft.Bot.Builder;
    using Microsoft.Bot.Connector;
    using Microsoft.Azure.CognitiveServices.Search.WebSearch;
    using Microsoft.Azure.CognitiveServices.Search.WebSearch.Models;

    namespace MyFYP.Dialogs
    {
        public class BingSearchHelper 
        {
            public async static  Task SearchWebAsync(IDialogContext context,string key,string query)
            {
                IWebSearchClient client = new   WebSearchClient(new ApiKeyServiceClientCredentials(key));
                var result = await client.Web.SearchAsync(query:query, count:3, safeSearch: SafeSearch.Strict);  
                if(result?.WebPages?.Value?.Count>0)
                {
                    await context.PostAsync($"Here is top 3 results for  {query} ");
                    foreach(var item  in result.WebPages.Value)
                    {
                        HeroCard card = new HeroCard
                        {
                            Title = item.Name,
                            Text = item.Snippet,
                            Buttons = new List<CardAction>
                            {
                        new CardAction(ActionTypes.OpenUrl,"Open Page",value:item.Url)
                            }

                        };
                        var message = context.MakeMessage();
                        message.Attachments.Add(card.ToAttachment());
                        await context.PostAsync(message);
                    }
                }
             }
        }


    }

1 Ответ

0 голосов
/ 02 июня 2019

В WelcomeDialog.cs вы вызываете context.Wait (PerformActionAsync), который выполняет функцию WelcomeDialog.PerformActionAsync. Замените PerformActionAsync на BingSearchHelper.SearchWebAsync, если вы хотите вместо этого запустить эту функцию.

context.Wait(BingSearchHelper.SearchWebAsync);

Чтобы ответить на более крупный вопрос «Как запустить несколько файлов класса C #», вы обычно делаете это одним из двух способов.

  1. Путем создания экземпляра этого класса и вызова функций из этого экземпляра

    Животная собака = новая Животная ();

    dog.Sit ();

  2. Или, если функция, которую вы хотите вызвать, является статической (что означает, что объект класса не нужно создавать, как в первом примере), вы можете просто вызвать имя класса, а затем функция

    Animal.Sit ();

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