[英]How can I generate url from non-controller static class in asp.net mvc 2 project?
[英]How can I use the same instance of a non-static class in every controller in an ASP.NET page?
我是ASP.Net框架的新手,目前正在努力了解如何管理對象的生存期。
在更具體的情況下,我目前在應用程序中遇到問題:
我想有一個從我的應用程序開始的類,該類應在后台運行並做一些工作,這些工作將在以后的應用程序控制器中處理一些數據。
因此,我將嘗試在Global.asax.cs
創建此類的對象,以便它可以在我的應用程序也運行時立即啟動並運行。
但是,如何將這個實例傳遞給控制器,該控制器隨后可能會被調用?
當前,我唯一的想法是使我的數據收集類成為static
類,對此我並不滿意,因為我想盡可能避免使用靜態類。
有什么解決辦法嗎?
您可以創建一個具有靜態成員的類,或者創建一個單例以將數據和邏輯保存在一個地方。 可以通過在Application_Start
調用Global.asax.cs
中的方法之一來啟動類內部的處理。
由於一個以上的線程可以同時訪問靜態數據收集,因此數據收集可能需要多線程訪問處理。
我腦海中的選擇:
應用程序變量 System.Web.HttpContext.Current.Application["Name"] = "Value";
您可以將整個對象添加到應用程序變量中,並且將能夠在應用程序生存期內的任何地方訪問同一對象。
單例仍然是靜態方式: https : //msdn.microsoft.com/zh-cn/library/ff650316.aspx
使用靜態變量
如果使用的是諸如Autofac之類的依賴項注入框架,則可以實例化類的新實例,並使用DI框架將其注冊為單個實例(單例)。
// In your DI config -- Autofac used here as an example
Foo myFoo = new Foo();
myFoo.Start();
builder.RegisterInstance<Foo>(myFoo).AsSelf().SingleInstance();
然后,只需將其作為參數添加到控制器的構造函數即可。
public class HomeController : Controller
{
private readonly Foo _myFoo;
public HomeController(Foo myFoo)
{
_myFoo = myFoo;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.