這邊先插播一個內容,雖然使用 Blazor 可以透過開發環境來下中斷點,但還是有人會希望印在瀏覽器的 console
視窗上吧?此時 Blazor 就提供了一個好用的服務,只要在該畫面元件上注入 ILogger<T>
服務即可,以範本提供的計數器頁面為例:
1 | @* Counter.razor *@ |
只要透過 @Inject
為畫面元件注入 ILogger<Counter>
就好,根據紀錄類型分為 Log
透過參數來決定紀錄層級,與特定記錄層級的方法 LogTrace
, LogDebug
, LogInformation
, LogWarning
, LogError
與 LogCritical
;當然紀錄層級的分法只需要團隊有共識即可,不要全部都歸同一類就好。
使用方式我們就改寫 IncrementCount
方法來做示範:
1 | @* Counter.razor *@ |
這樣一來,開啟瀏覽器的開發者工具(F12)並觀看 Console
視窗,只要點擊 Click me
按鈕就會有內容輸出,是不是很簡單呀?但說到這邊,不知道大家是否還記得 _imports.razor
檔案的用處,只要把 @using Microsoft.Extensions.Logging;
移到這裡,那麼以後的檔案就可以省掉一行了!讓程式碼更簡潔了呢。
以上就是在瀏覽器視窗上使用紀錄(Log)的方法。
你以為這樣就結束了嗎?你不好奇這邊的 Counter
類型從哪裡來嗎?我們可以透過開發工具,也就是滑鼠滑過去看,你會發現是 你的專案名稱.Pages.Counter
這個類型,但我們並沒有定義這個類型呀。
其實每一個 razor
檔都會依照應用程式的專案名稱與資料夾組合而成的命名空間,並以檔案名稱當作類型名稱,所以 Counter.razor
有著 你的專案名稱.Pages
命名空間與 你的專案名稱.Pages.Counter
類型。
而 Blazor 其實可以讓我們分割檔案,將邏輯放到 .razor.cs
檔案中,所以我們可以在 Pages
目錄下新增一個 Counter.razor.cs
檔案。
可以看到新增完馬上出現紅字。
因為剛剛提到的 razor
也包含了類型,但屬於部分類型,所以只需要添加部分類型關鍵字 partial
即可:
1 | // Counter.razor.cs |
這邊要補充一下 .razor
檔案首字母一定要大寫!若不小心新增檔案時以小寫開頭,那麼專案會直接建置失敗!
然後將 .razor
檔案的邏輯放到 .razor.cs
檔案中就可以實現畫面與邏輯分離囉!
最終結果為:
1 | @* Counter.razor *@ |
1 | // Counter.razor.cs |
這邊要注意的一點是,_Imports.razor
檔案中的 @using
指示詞只會套用至 .razor
檔案,而 .razor.cs
檔案是吃不到的。所以我們需要 using Microsoft.Extensions.Logging;
來讓 logger
的 LogInformation
能被找到。
以上就是為什麼 .razor
裡面夾帶類型以及畫面與邏輯分開的寫法,雖然這邊使用到了相依性注入,但實際講解可能會在幾天後,還請各位等待。
感謝大家的閱讀,我們明天見。