Я использую Microsoft Bot Framework для создания Bot. Я вызываю диалог на POST для MessageController, как это:Использование ILifetimeScope внутри IDialog
using (var scope = DialogModule.BeginLifetimeScope(_scope, activity))
{
var postToBot = scope.Resolve<IPostToBot>();
await postToBot.PostAsync(activity, cancellationToken);
}
Внутри моего Диалог класса, мне нужно использовать завод, использующий эту область. Проблема заключается в получении этой области внутри класса Dialog.
Если я вставляю ILifetimeScope в конструктор, он работает в первый раз. Но этот тип не сериализуем (выдает ошибку в BotFramework). Поэтому я должен отметить это как несериализуемое, но у меня нет способов снова получить эту область. Я пытаюсь использовать по умолчанию WebApi DependencyResolver, но мне нужна функция AutoFac, которая разрешает ключевые службы. Если я разрешаю ILifetimeScope от DependencyResolver, тогда он возвращает область «root», и мне нужна вложенная область (такая же, что и на контроллере сообщений).
Я решил свою проблему, сохраняя область действия в переменной static, но это не изящно.
using (var scope = DialogModule.BeginLifetimeScope(_scope, activity))
{
IocModule.CurrentScope = scope;
var postToBot = scope.Resolve<IPostToBot>();
await postToBot.PostAsync(activity, cancellationToken);
}
Другие идеи?
Большое спасибо ... Я не знал этот сайт с образцами бота ... –
Не беспокойтесь. Это совершенно новое, и это было объявлено всего несколько дней назад: https://blog.botframework.com/2016/09/26/new-bot-builder-sdk-samples-released/ –