Autofac을 사용하여 채팅 봇의 대화 상자 클래스에 종속성 주입을 통해 서비스를 제공하려고합니다. 내 Global.asax.cs 파일에 아래와 같이 Autofac 컨테이너를 구성한 :#botframework dependency injection
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, activity))
{
await Conversation.SendAsync(activity,() => scope.Resolve<IDialog<object>>());
}
대화가 먼저 해결되고 :
는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 클래스에서이 코드는 성공적으로 대화를 해결합니다 생성자가 실행되면 Visual Studio에서 디버깅하는 동안 관찰 된대로 IAnalyticsService의 구현이 성공적으로 삽입됩니다.
[Serializable]
public class RootDialog : IDialog<object>
{
private readonly IAnalyticsService _analyticsService;
public RootDialog(IAnalyticsService analyticsService)
{
SetField.NotNull(out _analyticsService, nameof(analyticsService), analyticsService);
}
}
이 단계 후에 _analyticsService 변수에 액세스하려고 할 때 단 (즉, 사용자에 의해 전송 된 메시지를 처리 할 때)는 항상 NULL이다. 거기에 NonSerializable 특성을 설정하려고했지만 아무런 차이가 없습니다. 추가 디버깅은 생성자가 다시 히트되지 않음을 보여줍니다.
이 변수가 null이 될 수있는 이유와 문제의 잠재적 해결책에 대해 누구든지 조언 할 수 있습니까?