3

我正在编写一个带有单独核心类库的 Outlook 加载项。我正在尝试使用 Ioc 容器(Autofac),但是对于如何将 Outlook 会话注册为我的服务的依赖项,我有点迷茫。

我是DI新手。

在我的 ThisAddIn.cs 文件中,我在我的类库中实例化了一个引导程序:

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

  base.BeginInit();
}

AddInBootStrapper.cs 类在我的核心类库中。它的构造函数如下所示:

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;
    }

我不确定如何以正确的方式连接它。我是否只是通过其构造函数将 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 回答