在webman中,在一個進程中,靜態(tài)變量、(單例)都是所有請求中共享使用,那么有沒有可以做到在僅僅在一個請求中,某個(單例)類可以在這個請求業(yè)務(wù)任意一個地方可以使用,不需要重復(fù)實例化呢(不同請求之間不能互相使用),這個類在這個請求結(jié)束后自動釋放?
舉個例子
1、目前l(fā)og類實例化后(同一個通道),在一個進程后就只有一個日志類(全局日志類),但我想在每次寫日志時都要附帶上額外的信息(本次請求的信息【包括我自定義的信息】或者用戶個人信息),要是我每次寫入的時候就加上額外信息(如:Log::info($user->username.'log test')),那我覺得有點麻煩,所以我繼承并改寫了Log類,新增一個方法可以做到每次實例化時都時一個新類,那么這個類就只為本次請求服務(wù),但問題來了,我如何可以在本次請求中任意協(xié)程、任意類中使用他呢,不需要每次都實例化一個新類,就像傳統(tǒng)web那樣的單例模式
你想要把數(shù)據(jù)放在本次請求里面,實際上你的問題已經(jīng)給了你答案,就是將數(shù)據(jù)放到request對象里面即可。如何控制加載這個數(shù)據(jù)的時機,可以看一下中間件章節(jié)的文檔,如果是請求開始就需要加入就在全局中間件里面加載數(shù)據(jù),如果是用戶信息的數(shù)據(jù)應(yīng)該是在驗證token或者session的中間件里面增加數(shù)據(jù)加載邏輯