簡體   English   中英

如何在ASP.NET頁的每個控制器中使用非靜態類的相同實例?

[英]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中的方法之一來啟動類內部的處理。

由於一個以上的線程可以同時訪問靜態數據收集,因此數據收集可能需要多線程訪問處理。

我腦海中的選擇:

如果使用的是諸如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM