我尝试使用Unity将对象设置为单例,但每次发出请求时都会创建对象。
public class ShareTubeRoomRepository : IShareTubeRoomRepository
{
public ShareTubeRoomRepository()
{
//load my base data
}
Unity配置
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不应该发生,对吧?
答案 0 :(得分:1)
我尝试将要存储的数据设置为静态,因此无法获取 刷新,并在静态构造函数中实例化它,但是甚至 静态构造函数被多次调用。
这意味着您的应用程序中有多个AppDomains
。我想你在IIS上运行它有多个工作者。在这种情况下,它将按AppDomain
创建一个单例。确保使用单个AppDomain。
答案 1 :(得分:0)
我通过创建一个依赖于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();