3

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

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

例如,假设我已经注册:

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

问题是,在每个注册 CoreModule 的引导程序上,它们都会创建一个 AcrossComponent 实例,该实例是该 IContainer 上的 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 实例。

4

0 回答 0