Unity RegisterInstance在每个请求中重新创建singleton
本文关键字:新创建 创建 singleton RegisterInstance 请求 Unity | 更新日期: 2023-09-27 18:12:54
我正在尝试使用Unity将对象设置为单例,但每次我发出请求时都会创建该对象。
public class ShareTubeRoomRepository : IShareTubeRoomRepository
{
public ShareTubeRoomRepository()
{
//load my base data
}
统一配置
public static void RegisterTypes(IUnityContainer container)
{
container.RegisterInstance<IShareTubeRoomRepository>(new ShareTubeRoomRepository(), new ContainerControlledLifetimeManager());
}
我还尝试了以下操作:
container.RegisterType<IShareTubeRoomRepository, ShareTubeRoomRepository>(new ContainerControlledLifetimeManager());
我在存储库的构造函数中放置了一个断点,并且每次在MVC应用程序中加载页面时都会调用它。我找到的所有资源都说,这些注册类型的方法应该将其创建为单例,那么为什么每次请求都要重新创建这个实例呢?
我试图使我想要存储的数据static
,所以它不会得到刷新,并在静态构造函数中实例化它,但即使是静态构造函数被调用多次。根据这个答案:https://stackoverflow.com/a/5119154/526704这不应该发生,对吧?
我试着让我想要存储静态的数据,所以它不会得到刷新,并在静态构造函数中实例化它静态构造函数被多次调用。
这意味着您的应用程序中有多个AppDomains
。我想你是在IIS上运行它,有多个worker。在这种情况下,它将为每个AppDomain
创建一个单例。请确保使用单个AppDomain。
我通过创建一个依赖于使用HttpContext.Current.Application
字典(https://stackoverflow.com/a/3733549/526704)的属性来解决这个问题
System.Web.HttpContext.Current.Application.Lock();
System.Web.HttpContext.Current.Application["Name"] = "Value";
System.Web.HttpContext.Current.Application.UnLock();