Dependency injection 带有依赖项注入(IoC)的Outlook加载项

Dependency injection 带有依赖项注入(IoC)的Outlook加载项,dependency-injection,ioc-container,autofac,outlook-addin,Dependency Injection,Ioc Container,Autofac,Outlook Addin,我正在编写一个带有独立核心类库的Outlook外接程序。我正在尝试使用Ioc容器(Autofac),但对于如何将Outlook会话注册为我的服务的依赖项,我有点不知所措 我是个新手 在ThisAddIn.cs文件中,我在类库中实例化了一个引导程序: public override void BeginInit() { _core = new AddInBootstrapper(); base.BeginInit(); } AddInBootTrapper.cs类位于我的核心类库中。其

我正在编写一个带有独立核心类库的Outlook外接程序。我正在尝试使用Ioc容器(Autofac),但对于如何将Outlook会话注册为我的服务的依赖项,我有点不知所措

我是个新手

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

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

  base.BeginInit();
}
AddInBootTrapper.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();
    }
我不知道如何用正确的方式把它连接起来。我是简单地通过它的构造函数将会话传递到Bootstrapper类,然后将其连接起来,还是有其他/更好的方法

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

我已经将会话从ThisAddIn类传递到核心类库,它工作正常

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();
    }
public AddInBootstrapper(Microsoft.Office.Interop.Outlook.NameSpace会话)
{
var containerBuilder=新的containerBuilder();
Register(c=>newoutlookservice(session)).As();
containerBuilder.RegisterType().As();
_container=containerBuilder.Build();
}

我找到了一些有效的方法,但不确定是否理想。见下文
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();
    }