Я работаю над новым чат-ботом, используя службу Azure Bot и QnAMaker. Мы используем промежуточное ПО BotBuilder, в том числе настраиваемое ПО промежуточного слоя, чтобы настроить поведение бота.
Одно из промежуточных программ будет вызывать функцию Azure, и я хотел бы использовать новую функцию HttpClientFactory
с настраиваемым промежуточным программным обеспечением, но для этого требуется внедрение зависимостей.
Как я могу использовать внедрение зависимостей в промежуточном программном обеспечении BotBuilder, как вы это делаете с обычным промежуточным программным обеспечением .NET Core?
Когда вы посмотрите на конфигурацию бота в Startup.cs, вы увидите, что вам нужно создать все зависимости бота:
services.AddHttpClient<MyFunctionClient>(client =>
{
client.BaseAddress = new Uri(mySettings.GetValue<string>("myFunctionUrl"));
client.DefaultRequestHeaders.Add("x-functions-key", mySettings.GetValue<string>("myFunctionKey"));
});
services.AddBot<QnAMakerBot>(options =>
{
options.CredentialProvider = new ConfigurationCredentialProvider(Configuration);
options.ConnectorClientRetryPolicy = new RetryPolicy(
new BotFrameworkHttpStatusCodeErrorDetectionStrategy(),
3,
TimeSpan.FromSeconds(2),
TimeSpan.FromSeconds(20),
TimeSpan.FromSeconds(1));
var middleware = options.Middleware;
middleware.Add(new ConversationState<ChatLog>(new MemoryStorage()));
middleware.Add(new MyCustomMiddleware()); // <- I want to inject a typed HttpClient here
//... etc. ....
Есть ли другой способ настройки бота, позволяющий внедрять зависимости?
Если MyCustomMiddleware
требует типизированного HttpClient
в своем конструкторе, я должен создать новый экземпляр прямо здесь, поэтому я не получаю преимуществ от DI и конфигурации, которую я только что настроил.