Autofac - 跨多个容器的{Single}实例

时间:2015-08-01 14:59:47

标签: c# singleton autofac autofac-module

我有一个动态启动不同进程的应用程序。 每个进程都使用一个autofac CoreModule,每个进程都有自己的模块用于该进程。

CoreModule定义了一些在应用程序的所有进程中必须为SingleInstance的组件。

例如,让我们说我已注册:

builder.RegisterType<AcrossComponent>().As<IAcrossComponent>().SingleInstance();

问题是,在每个注册CoreModule的Bootstrapper上,他们在该IContainer上创建了一个AcrossComponent实例,它是SingleInstance。

我设法通过使用AcrossComponent作为书单例的外观来解决它

namespace Sample
{
  public class AcrossComponent : IAcrossComponent
  {
    public AcrossComponent()
    {
    }

    public void DoSomething()
    {
        RealAcrossComponent.Instance.DoSomething();
    }
  }

  private class RealAcrossComponent
  {
    private static RealAcrossComponent _instance;
    public static RealAcrossComponent Instance
    {
        get
        {
            if(_instance == null)
                _instance = new RealAcrossComponent();

            return _instance;
        }
    }

    private RealAcrossComponent()
    {
    }

    public void DoSomething()
    {}
  }
}

当然,这不是我想解决这个问题的方式,Autofac可能无论如何都无法找到它。

(已经通过注册CoreModule的相同实例尝试了,但它似乎没有任何改变,它只是注册的外观)

提前致谢!

编辑1:

该应用程序是一个Windows窗体,用户配置东西,并包含多个按钮,每个按钮都点击入口点:

public static class BackGroundProcess1{
 public static void StartBackground()
 {
  //creates container with CoreModule, BackGround1Module and starts everything.
   _container.Resolve<IMainComponent>().StartBackground();
 }
}

这样有4个类,它们就像是在后台开始处理的所有事物的入口点。 我希望所有这4个人共享CoreModule实例。

0 个答案:

没有答案