将中间件添加到机器人框架

Adding middleware to bot framework

我正在尝试将中间件添加到 echo bot 中,它将消息转换为小写字母。

我创建了继承自 IMiddleware

的中间件 class
public class MiddlewareOne : IMiddleware
    {
        public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken = default)
        {
            if(turnContext.Activity.Type == ActivityTypes.Message)
            {
                Debug.WriteLine(turnContext.Activity.Text);

                turnContext.Activity.Text = turnContext.Activity.Text.ToLower();
                await next(cancellationToken);

                Debug.WriteLine(turnContext.Activity.Text);
            }
            else
            {
                await next(cancellationToken);
            }
        }
    }
}

现在我正在尝试将其添加到 Startup.cs 文件中。我发现某处应该将其添加为 Transient。

services.AddTransient<MiddlewareOne>();

还是不行。我觉得 MiddlewareOne class 没问题,但我应该如何在 Startup.cs 文件中配置它?

谢谢

您必须通过调用 Use method in constructor 在 BotFrameworkAdapter 后代(例如 BotFrameworkHttpAdapter)中注册中间件。您可以将中间件作为构造函数参数传递,DI 将负责激活。

一个例子(在没有 VS 协助的情况下制作)

public class MyAdapter : BotFrameworkHttpAdapter
{
    public MyAdapter(MiddlewareOne mw1, IConfiguration configuration, ILogger<BotFrameworkHttpAdapter> logger)
        : base(configuration, logger)
    {
        Use(mw1);
        // other code..
    }
}