2

별도의 핵심 클래스 라이브러리가있는 Outlook 추가 기능을 작성하고 있습니다. Ioc 컨테이너 (Autofac)를 사용하려고하지만 Outlook 서비스를 내 서비스의 종속성으로 등록하는 방법에 대해 약간 분실했습니다.종속성 삽입 (IoC)을 사용하는 Outlook 추가 기능

나는 DI 초보자입니다.

public override void BeginInit() 
{ 
    _core = new AddInBootstrapper(); 

    base.BeginInit(); 
} 

AddInBootStrapper.cs 클래스 내 핵심 클래스 라이브러리에 내 ThisAddIn.cs에서

내가 내 클래스 라이브러리에서 부트 스트 래퍼를 인스턴스화 파일.

public OutlookService(Microsoft.Office.Interop.Outlook.NameSpace session) 
    { 
     _session = session; 
    } 

나는이를 배선하는 방법을 잘 모르겠어요 :

public AddInBootstrapper() 
    { 
     var containerBuilder = new ContainerBuilder(); 

     containerBuilder.RegisterType<OutlookService>().As<IOutlookService>(); 
     containerBuilder.RegisterType<EmailPrintService>().As<IPrintService<Microsoft.Office.Interop.Outlook.MailItem>>(); 

     _container = containerBuilder.Build(); 
    } 

내 OutlookService 클래스는 Outlook 세션에 대한 종속성 (ThisAddIn.Application.Session)가 : 그 생성자는 지금처럼 보인다 올바른 방식. Session을 생성자를 통해 Session을 Bootstrapper 클래스로 전달한 다음 연결을 해제하거나 다른/더 좋은 방법이 있습니까?

_core = new AddInBootstrapper(this.Application.Session); 
+0

나는 이상적인 것이지만 작동하지 않는 것을 발견했습니다. 아래 참조 – raydenl

답변

0

ThisAddIn 클래스의 세션을 Core 클래스 라이브러리로 전달한 결과 정상적으로 작동합니다.

public AddInBootstrapper(Microsoft.Office.Interop.Outlook.NameSpace session) 
    { 
     var containerBuilder = new ContainerBuilder(); 

     containerBuilder.Register(c => new OutlookService(session)).As<IOutlookService>(); 
     containerBuilder.RegisterType<EmailPrintService>().As<IPrintService<Microsoft.Office.Interop.Outlook.MailItem>>(); 

     _container = containerBuilder.Build(); 
    }