首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >#botframework依赖注入

#botframework依赖注入
EN

Stack Overflow用户
提问于 2016-12-21 00:23:53
回答 0查看 367关注 0票数 2

我正在尝试使用Autofac通过依赖注入为我的聊天机器人中的一个对话类提供服务。我已经在我的Global.asax.cs文件中配置了Autofac容器,如下所示:

代码语言:javascript
复制
var builder = new ContainerBuilder();
var config = GlobalConfiguration.Configuration;

builder
    .RegisterType<RootDialog>()
    .As<IDialog<object>>()
    .InstancePerDependency();

builder
    .RegisterType<GoogleAnalyticsService>()
    .Keyed<IAnalyticsService>(FiberModule.Key_DoNotSerialize)
    .AsImplementedInterfaces()
    .SingleInstance();

builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

builder.RegisterWebApiFilterProvider(config);

builder.Update(Conversation.Container);

我的MessageController类中的这段代码成功地解析了对话框:

代码语言:javascript
复制
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, activity))
{
    await Conversation.SendAsync(activity, () => scope.Resolve<IDialog<object>>());
}

当第一次解析对话框并运行构造函数时,在Visual Studio中调试时观察到的IAnalyticsService实现被成功注入。

代码语言:javascript
复制
[Serializable]
public class RootDialog : IDialog<object>
{
    private readonly IAnalyticsService _analyticsService;

    public RootDialog(IAnalyticsService analyticsService)
    {
        SetField.NotNull(out _analyticsService, nameof(analyticsService), analyticsService);
    }

}

但是,当在此阶段之后尝试访问_analyticsService变量时(即,在处理用户发送的消息时),它始终为空。我尝试在它上面设置一个NonSerializable属性,但这并没有什么不同。进一步的调试还表明,构造函数不会再次命中。

有没有人能告诉我为什么这个变量会为空,以及这个问题的任何潜在解决方案?

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41246874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档