這是在asp.net mvc3中定義一些單例變量的機會嗎? 我想定義它(可能在global.asax),然後在控制器得到它,通過IOC解析器(結構圖)Asp.Net MVC3單例變量
簡單:我想有一個屬性具有相同的數據爲所有用戶,不依賴於請求,會話, ...例如在MVC應用程序的第一次啓動時,我將DateTime值設置到此屬性中,然後所有請求都可以查看此屬性並在控制器中修改此屬性。
這是在asp.net mvc3中定義一些單例變量的機會嗎? 我想定義它(可能在global.asax),然後在控制器得到它,通過IOC解析器(結構圖)Asp.Net MVC3單例變量
簡單:我想有一個屬性具有相同的數據爲所有用戶,不依賴於請求,會話, ...例如在MVC應用程序的第一次啓動時,我將DateTime值設置到此屬性中,然後所有請求都可以查看此屬性並在控制器中修改此屬性。
只需使用StructureMap創建使用依賴解析器像this blog post列出您的控制器。注入沒有直接的變量,但保存的實例變量:
public class GlobalScope
{
public String Variable { get; set; }
}
現在,你可以注入GlobalScope到您的控制器和設置/獲取變量,但請記住,你在多線程環境是哪裏的讀取和寫變量的訪問必須是同步的,否則你會遇到一些奇怪的競爭條件。
首先,你可以在.net中使用簡單的單例模式,這與asp.net或asp.net mvc中沒有特定的東西有關。
如果你想使用IoC,你可以註冊你的類實例像單個實例,IoC將只返回你唯一的類實例。將必要的屬性添加到此實例並進行編輯。初始化將在類型註冊步驟:
在樣品Autofac:
builder.Register(MySingleton.Instance);
,並與延遲初始化:
builder.Register(c => MySingleton.Instance);
您也可以註冊類型和國際奧委會將控制你的類型的初始化,但在這種情況下,初始化期間不能設置默認值:
builder.RegisterType<MyType>().SingleInstance();
您可以將數據存儲爲Application類的靜態成員。看到這篇文章 - Application State in ASP.NET
你的IoC容器可能擴展了單例的概念。 Ninject使用InSingletonScope。這會比靜態應用變量更好,因爲任何庫必須知道您的應用程序,然後纔有循環引用。
任何公開的變量或類Static駐留在AppDomain中,並且全局可用於所有會話。所以你可以簡單地:
已經知道使用所有3包括使用公共服務定位,找到IOC容器,這讓我們的生活方便。
希望這有助於