将中间件添加到机器人框架
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..
}
}
我正在尝试将中间件添加到 echo bot 中,它将消息转换为小写字母。
我创建了继承自 IMiddleware
的中间件 classpublic 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..
}
}