J'essaie d'ajouter un middleware dans echo bot, qui convertit le message en minuscules.

J'ai créé une classe Middleware qui hérite d'IMiddleware

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);
            }
        }
    }
}

Maintenant, j'essaie de l'ajouter dans le fichier Startup.cs. J'ai trouvé quelque part qu'il devrait être ajouté en tant que transitoire.

services.AddTransient<MiddlewareOne>();

Pourtant, cela ne fonctionne pas. Je pense que la classe MiddlewareOne est correcte, mais comment dois-je la configurer dans le fichier Startup.cs ?

Je vous remercie

2
Kuba K 9 nov. 2020 à 12:19

1 réponse

Meilleure réponse

Vous devez enregistrer le middleware dans votre descendant BotFrameworkAdapter (par exemple BotFrameworkHttpAdapter) en appelant le Utiliser la méthode dans le constructeur. Vous pouvez passer le middleware comme paramètre de constructeur et DI se chargera de l'activation.

Un exemple (réalisé sans l'aide de VS)

public class MyAdapter : BotFrameworkHttpAdapter
{
    public MyAdapter(MiddlewareOne mw1, IConfiguration configuration, ILogger<BotFrameworkHttpAdapter> logger)
        : base(configuration, logger)
    {
        Use(mw1);
        // other code..
    }
}
2
Martin Frøhlich 9 nov. 2020 à 09:29