我有一个动态启动不同进程的应用程序。每个进程都使用一个 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 实例。