1
我正在嘗試使用Autofac通過依賴注入爲聊天機器人中的對話框類提供服務。我在的Global.asax.cs文件,如下配置的Autofac容器:#botframework依賴注入
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類成功解決了對話框:
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, activity))
{
await Conversation.SendAsync(activity,() => scope.Resolve<IDialog<object>>());
}
當對話框第一次解決,構造函數運行時,IAnalyticsService的實現被成功注入,正如在Visual Studio中進行調試時所觀察到的那樣。
[Serializable]
public class RootDialog : IDialog<object>
{
private readonly IAnalyticsService _analyticsService;
public RootDialog(IAnalyticsService analyticsService)
{
SetField.NotNull(out _analyticsService, nameof(analyticsService), analyticsService);
}
}
嘗試此階段後訪問_analyticsService可變然而,當(即處理由用戶發送的消息時)它總是空。我已經嘗試設置一個NonSerializable屬性,但這沒有任何區別。進一步的調試也表明構造函數不會再次被打中。
任何人都可以建議,爲什麼這個變量將爲空,以及任何可能的解決方案的問題?