2016-12-20 3 views
1

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이 될 수있는 이유와 문제의 잠재적 해결책에 대해 누구든지 조언 할 수 있습니까?

답변

0

다시 청소하고 다시 작성한 후 솔루션이 작동했습니다. 실망.