3

別のコア クラス ライブラリを使用して Outlook アドインを作成しています。Ioc コンテナー (Autofac) を使用しようとしていますが、サービスの依存関係として Outlook セッションを登録する方法がわかりません。

DI初心者です。

ThisAddIn.cs ファイルでは、クラス ライブラリでブートストラップをインスタンス化します。

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

  base.BeginInit();
}

AddInBootStrapper.cs クラスは、Core クラス ライブラリにあります。そのコンストラクタは次のようになります。

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) に依存しています。

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

これを正しい方法で配線する方法がわかりません。セッションをコンストラクターを介して Bootstrapper クラスに渡すだけですか、それとも別の/より良い方法がありますか?

_core = new AddInBootstrapper(this.Application.Session);
4

1 に答える 1

1

セッションを 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();
    }
于 2012-07-19T01:28:47.907 に答える