- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将 Bot composer 与自定义操作集成。自定义操作依次调用不同的 API 来执行某些业务逻辑。我想将接口(interface)和服务提供者注入(inject)自定义操作。尽管我已经在 startup.cs 中正确添加了所有内容,但我在执行此操作时遇到了麻烦,因为它失败并进入了空指针异常。你能解释一下我怎样才能做到这一点吗?
[JsonConstructor]
public MultiplyDialog(IServiceProvider serviceProvider, [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0)
: base()
{
serviceProvider.GetService<ApiService>() // serviceprovider always null
this.RegisterSourceLocation(sourceFilePath, sourceLineNumber);
}
最佳答案
您必须记住,在使用自适应对话框(即 Composer 的核心)时,对话框是单例的,并且在使用 Composer 时,它们不会从依赖注入(inject) (DI) 中实例化。
此外,由于对话框是单例,您不能(好吧,您可以但不应该)使用诸如构造函数注入(inject) DbContext 和类似服务(在使用 SDK 时,即编码时)。
解决此问题的最简单方法是使用 HttpRequest
操作使用 HTTP 请求。这是构建到整个自适应对话生态系统中以实现此类功能的方式。
如果您真的坚持在对话框中使用 DI,则必须从 TurnContext
解决 DI,并且必须在适配器中设置它。但是,这有点复杂,需要您使用自定义运行时。
更新 添加了使用自适应对话框实现 DI 的方法。
1 - 在适配器中注册turn状态的服务类
public class AdapterWithErrorHandler : BotFrameworkHttpAdapter
{
public AdapterWithErrorHandler(
IConfiguration configuration,
ILogger<BotFrameworkHttpAdapter> logger,
//...
QnAClient qnaClient)
: base(configuration, logger)
{
// Add QnAClient to TurnState so we can use it while in the turn
Use(new RegisterClassMiddleware<QnAClient>(qnaClient));
//...
}
}
在上面的代码中,QnAClient
是使用 IHttpClientFactory
创建的类型化 HttpClient,因此使用单例是安全的。
2 - 在任何需要的地方从 TurnState
获取服务
public async Task SetPropertiesAsync(DialogContext context, ...)
{
var qnaClient = context.Context.TurnState.Get<QnAClient>();
//...
}
顺便说一句,当您在 ConfigureServices
中像这样注册它时,这是让 IHttpClientFactory
正确管理 HttpClient
的好方法:
services.AddHttpClient<QnAClient>()
.AddTransientHttpErrorPolicy(p => p.WaitAndRetryAsync(new[] { 1, 2, 3, 5, 8, 13 }.Select(t => TimeSpan.FromSeconds(t))))
.AddTransientHttpErrorPolicy(p => p.CircuitBreakerAsync(6, TimeSpan.FromSeconds(30)));
在本例中使用来自 Polly 的重试策略。
关于botframework - Bot Composer 自定义操作中的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67424361/
我在 C# 中为我的聊天机器人使用 botframework channel 直达线,最近我添加了 Bing 语音,用于文本到语音,反之亦然,但是当用户说话时,除了纯文本之外,是否还有音频文件作为消息
我有一个来自用户上传图片的字节数组。我需要使用 Bot-framework 在 Skype 和其他 channel 上将此字节数组呈现为图像 最佳答案 图像可以作为 base64 编码发送:
我正在使用自定义的 Microsoft Bot 框架 WebChat Client .当我的机器人无法为用户提供解决方案时,它能够与代理进行实时聊天服务。 我需要允许代理“先睹为快”当前正在输入 We
我正在运行 Windows 10 并想安装 BotFramework-Emulator。 链接 here说 Download packages for Mac, Windows, and Linux
我有一个机器人,它具有消息传递扩展功能。我遵循了一个例子 here .但是我没有使用卡片 View ,而是使用嵌入式 Web View 来显示我的自定义 UI(这是一个托管在 S3 中的 React
我需要维护聊天历史记录,并在页面刷新或关闭并打开窗口后将它们加载回窗口中。 问题:按钮/轮播/自适应卡/英雄卡事件/属性未加载(即,当我单击按钮或任何事件时,操作未发生)。描述:为了达到要求,我有两个
我正在尝试 Microsoft 的新 Botframework。使用 \n 发送消息时,消息中没有换行符。我该如何解决? 在 Telegram API 中有一个名为 parse_mode (https
我发布了一个使用机器人框架构建的机器人,但我不知道如何将它连接到企业内部网络上的 Skype for Business。 有谁知道是什么流程吗? ----- 埃德 最佳答案 尚不支持 Skype fo
我已经在 .Net Framework WebAPI 中使用 Microsoft.BotFramework 实现了一个聊天机器人,它正在运行,现在我想将它移植到 .Net Core 2,与其他项目共享
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 9 个月前关闭。 Improve this ques
我在英雄卡中使用粗体文本时遇到了一些问题,目前我是这样构建我的英雄卡的: var workloadCard = new HeroCard { Title = $
nodejs中bot框架的输入指示器 你好, 我正在使用 microsoft bot framework v4, node js,我需要在聊天机器人中实现输入。在发送原始响应之前,机器人应该响应 li
我正在创建一个在电报 chanel 上运行的机器人。当用户与机器人聊天时,它需要知道谁在聊天。所以他们必须在我的服务器上进行身份验证。 我想机器人会发送一个按钮,其中包含我的身份验证端点的链接(例如:
我正在打开(使用 OpenUrl)我控制的外部网页。在加载此网页期间,我希望从服务器直接关闭团队模式,或者通过调用团队客户端重新发送带有参数的消息,以便机器人可以以关闭响应进行响应(我正在工作)。 我
我正在尝试发送 Teams notification与 hero card或 Adaptive Card .我可以发送一条简单的短信作为 notification . 我不知道如何包装 Hero ca
我创建了一个简单的 android 应用程序,它使用 restfull jersey WS 通过 JSON 格式发送消息 我应该在连接机器人的应用程序中输入哪个 URL? 该机器人如何接收消息并发回响
我正在创建一个允许用户与现有 Web 服务交互的机器人。我希望用户能够与我的机器人开始对话并检索针对他们的个性化信息。 如何将机器人用户与其现有帐户相匹配?并非所有 channel 都使用电子邮件地址
我用我的机器人尝试了这种电子邮件模式,但是在Skype上发布时不起作用。它总是拒绝任何正常的有效电子邮件。 [Describe("email "), Prompt(QuestionWhatIsYour
我有一个名为“表单搜索”的对话框,它有一个自适应卡片。当我单击提交按钮时,控件不会转到下一个流程,而是以错误结束。但如果使用英雄卡,按钮点击会触发下一个流程。可能是什么问题。 session.mess
我开发了一个聊天机器人并将其部署在 Skype 上。我有一件新东西要添加到机器人中。 如果用户在 bot 中请求办公室出租车,则 bot 必须接受用户输入(如目的地、emp-name 等)并向特定邮件
我是一名优秀的程序员,十分优秀!