[C#][DI] 相互依賴造成循環注入死結

問題緣由

最近在寫 .NET Core 的時候遇到了一個問題

 

A1Service

 

這是網路教學文章上常見的從建構子中依賴注入 A2Service 的程式
接著我們再來看看另外一支程式

A2Service

 

 

這裡就發生了一個循環依賴的問題 A1Service 在建構子中注入了 A2Service,而 A2Service 也在建構子中注入了 A1Service,造成兩個物件互相依賴造成 Exception

解決方法

改成不直接在建構子中注入 Service ,改注入 IServiceProvider,再利用 GetService 這個方法來取得物件,這樣就可以順利解決這個問題囉。

A3Service

 

A4Service

 

[iOS] 越獄後 Whoscall 老是更新失敗無法使用?

不知道有沒有人跟我一樣手賤去點更新 Whoscall,來電辨識功能就掛掉了,無法開啟識別也無法更新資料庫,嘗試過無數次重新安裝與重開機都出現下圖狀況

今天剛好看到瘋先生 免電腦!直接用App Store替iOS App 將版/降回舊版教學 這篇文章,就趕快在我的手機上降級 App 版本看看還有沒有救,最後結果當然是…復活拉 ~

實測裝置

  • Device:Apple iPhone 7
  • Version:iOS 10.1.1

教學步驟

  1. 從 Cydia 安裝 App Admin (教學)
  2. 在 AppStore 找到 Whoscall 長按開啟 並點選 Downgrade

  3. 選擇 2.2.16 (最後一版可以成功啟用的版本)

  4. 大功告成 !!

不知道 Whoscall 是為了防堵越獄還是程式本身的 Bug,有回報粉絲團許久都沒有修正這個問題,在程式修復以前目前只好用降版的方式了。

[Windows] 更新 Visual Studio 2017 後偵錯模式會自己停止?

最近更新了 Visual Studio 2017 到最新版本,發現在debug的時候 IIS Express 總是被停止運行,再找 bug 的時候發生這件事情實在是很惱人的一件事情,拜了 google 大神後發現微軟竟然在更新的時候偷偷把這個設定啟用,這實在是太坑了 !!

解決方法:將下面兩張圖的勾勾都取消就可以恢復正常囉。

[C#][LeetCode] 28. Implement strStr()

從傳入參數 haystack 中找出參數 needle 中的索引位置,非常基礎的一題

我的答案

 

[C#][LeetCode] 2. Add Two Numbers

輸入兩個 ListNode 物件並將兩個相同層數的數值加總,其值若超過 10 需進位到下個節點,這題我覺得迴圈解法比遞迴更讓人腦袋卡住,可能是我功力不夠吧。

我的遞迴解答:

 

 

我的迴圈作法:

 

 

[C#][LeetCode] 804. Unique Morse Code Words

這題要將英文轉換成摩斯密碼,並計算出重複字串的數量,我用 Linq 輕鬆解決。

 

[C#][LeetCode] 8. String to Integer (atoi)

外部輸入一個字串,若開頭為數字的話或 +- 符號的話則轉換為 int 的型態,且若超過 int 的最大或最小值則取極限值為準。

我的第一版答案如下:

 

 

參考最佳解答後的優化版:

 

[.NET Core] EFCore Generate DbModel

使用 EFCore 的時候沒有看有地方可以像 .NET Framework 可以直接使用 VS 新增 edmx 產生好資料庫的 Model 與 DbContext,這個時候就必須靠自己拉,不過當 Table 多的時候這樣人工慢慢新增 Model 有點智障,於是乎就上網找到了 EFCore Tool 有提供一段命令可以使用。

網址:https://docs.microsoft.com/zh-tw/ef/core/miscellaneous/cli/powershell

這裡就來簡單做個筆記

  1. 首先在 Package Manager Console 輸入指令安裝 EFCore Tool

  1. 若為 Win7 需要先裝 Windows Management Framework 3.0 否則會跟我一樣出現下面的錯誤
    錯誤畫面

  2. 檔案可以在 這裡 找到下載安裝並重開機。

  3. 產生 Model 前需注意一件事情就是密碼不能有 $ 符號,不然會跟我一樣鬼打牆一小時都找不到問題,我有嘗試使用單引號包起來,但依然無法成功連線

  4. 接著在 Package Manager Console 輸入指令 (適用於 Azure SQL DataBase)

  1. 接著就可以看到 VS 裡面跑出 DbModel 與 DbContext 囉 !!

[C#][Visual Studio 2017] 修改預設 class 存取範圍成 public

版本:Visual Studio 2017 Enterprise

路徑:

 

範本:

 

這樣就新增 class 時就會自己加上 public 囉

[SideProject] Gif 產生器

動機

原作者是 ruby 寫的 sorry

感覺頗有趣的就寫個 .NET 版來玩玩了

由於很懶所以沒有優化歡迎PR

專案說明

本專案是用 Visual Studio 2017 開發

基本上只要裝了微軟爸爸的 VS 後直接 F5 就可以執行了

若有問題歡迎發 Issues

連結

GitHub:https://github.com/shuangrain/SorryNet

Blog:https://blog.exfast.me/2018/03/SideProject-Gif-產生器/

Demo:https://exfast-sorry.azurewebsites.net/