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