簡體   English   中英

每次訪問單例實例時都調用一個方法

[英]Calling a method every time instance of singleton is accessed

我在代碼中使用了單例類,該類主要負責與設備進行通信。

該類中的主要功能之一是ConnectToDevice(),庫中還有另一種稱為IsPhoneConnected()的方法。

因此,基本上在沒有其他方法被稱為簡單檢查之前,如果尚未連接設備,則將其連接。 因此,無論是每種方法還是客戶端應用程序每次調用我的庫時,都有人負責編寫下面的代碼

(!IsPhoneConnected())
{
   ConnectToDevice() 
    return IsPhoneConnected() // If phone is not connected, try to connect, if still not connected then return false.
}

我不想一次又一次地寫這個邏輯。 我希望該類不必再一遍又一遍地調用此代碼。

有任何想法嗎?

如果任何給定功能需要連接電話,則它必須已經以某種方式與單例連接類進行交互

在這種情況下,如果單身人士內與手機交互的任何代碼都可以調用ConnectToDevice()(如果尚未連接)。

但是,如果您真的想在每次調用一組函數時都執行一個方法而不必每次都顯式調用,那么您所說的就是面向方面的編程

該范例不是C#固有的,但是可以使用PostSharp之類的工具進行模擬。

有關如何使用PostSharp向代碼中添加方面的良好教程,請查看 CodeProject文章。

您可能會得到類似以下內容的結果:

[PhoneConnectedAspect]
private void DoStuffWithPhone
{
     // your code here
}

例如,任何帶有該屬性標記的方法都可以自動調用ConnectToDevice()方法。

如Baldrick所說:這聽起來有點像面向方面的編程。

但是,如果在庫上調用任何方法都需要連接電話,我會將ConnectToDevice嵌入庫本身。 例如,僅將其嵌入到需要連接電話的庫的每種方法中。

AOP會更好,但這可以效仿。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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