安裝擴充功能 vscode-solution-explorer
資料來源參考網址:
https://github.com/fernandoescolar/vscode-solution-explorer
https://hackmd.io/@chiisen/rkvLrbX2p
2018年7月3日 星期二
2018年6月4日 星期一
2018年5月7日 星期一
DI—Dependency Injection 依賴注入 超超簡單說明
一般是用來解決「耦合性(相依)過高」的問題
通常都會搭配介面 interface 進行注入
讓程式保留彈性
便於在新的需求發生時
能便於抽換
下面我舉個例子
///
/// Logger 的介面
///
public interface ILogger
{
void Print(string msg, Color color);
}
///
/// 預設的 Console Logger
///
public class ConsoleLogger : ILogger
{
public void Print(string msg, Color color)
{
System.Console.WriteLine(msg);
}
}
這種繼承同一介面 interface 的手法,就叫做注入
這種手法可以簡單的利用繼承同一介面
實做自己須要的程式內容
一般都會透過 DI Container 集中註冊方式
統一管理所有DI元件
例如:Autofac
想瞭解 Autofac
可以到看看這個網頁:超簡單一分鐘學會 DI 框架 AutoFac
超簡單一分鐘學會 DI 框架 AutoFac
DI—Dependency Injection 依賴注入
安裝 AutoFac 的 NuGet 套件
整理一下,簡單的說:
1. ContainerBuilder.Register 註冊繼承 interface 的子類別
2. Container.Resolve 取得繼承 interface 的子類別
AutoFac 功能非常強大,上面程式碼只是入門
安裝 AutoFac 的 NuGet 套件
static void Main(string[] args)
{
// 註冊繼承 interface 的子類別
var builder_ = new ContainerBuilder();
builder_.RegisterType<Mylogger>().As<Ilogger>();
// 取得繼承 interface 的子類別
var container_ = builder_.Build();
var logger = container_.Resolve<Ilogger>();
}
整理一下,簡單的說:
1. ContainerBuilder.Register 註冊繼承 interface 的子類別
2. Container.Resolve 取得繼承 interface 的子類別
AutoFac 功能非常強大,上面程式碼只是入門
2018年3月16日 星期五
超簡單的公開發行我的 NuGet 套件 *.nupkg 檔案讓別人安裝使用
在你製作好自己 NuGet 的 檔案
先連線到 nuget 網站
點選右上角的「Sign In」
如果沒註冊過,請先註冊
點擊「Upload」再點選「Browse....」
把你的 *.nupkg 檔案上傳到網站上
記得點擊最下方的「Submit」按鈕
才會開始上傳
上傳完畢等待一下狀態改變後,就算發行成功,大家都能抓到你的 NuGet 套件了
安裝你的 NuGet 套件同一般 NuGet 安裝方式,這邊就不累述了。
想自己發行 NuGet 套件,可參考這篇:Visual Studio 2017 上 .NET Standard 超級簡單產生 NuGet 的 *.nupkg 檔案方式
先連線到 nuget 網站
點選右上角的「Sign In」
如果沒註冊過,請先註冊
點擊「Upload」再點選「Browse....」
把你的 *.nupkg 檔案上傳到網站上
記得點擊最下方的「Submit」按鈕
才會開始上傳
上傳完畢等待一下狀態改變後,就算發行成功,大家都能抓到你的 NuGet 套件了
安裝你的 NuGet 套件同一般 NuGet 安裝方式,這邊就不累述了。
想自己發行 NuGet 套件,可參考這篇:Visual Studio 2017 上 .NET Standard 超級簡單產生 NuGet 的 *.nupkg 檔案方式
Visual Studio 2017 超級簡單的安裝本地端 NuGet 或自己製作的 *.nupkg 檔案
點選「工具」的「選項」功能
點選「NuGet 套件管理員」選擇「套件來源」功能
按下右方綠色加號,產生可套用的來源
填入「名稱」與「來源」就可讀取本地端 *.nupkg 檔案了。
如果要安裝本地端 *.nupkg 檔案
點選「工具」「NuGet 套件管理員」「管理方案的 NuGet 套件」
點選右方展開鈕
選擇本地端的 nupkg 檔案選項
選擇前記得把自己的 *.nupkg 放到剛剛指定存放的目錄裡
等看到自己的 NuGet 專案,便可同一般 NuGet 安裝方式安裝到自己的專案內
如何自己製作 NuGet 的 *.nupkg 檔案可參考這篇:Visual Studio 2017 上 .NET Standard 超級簡單產生 NuGet 的 *.nupkg 檔案方式
點選「NuGet 套件管理員」選擇「套件來源」功能
按下右方綠色加號,產生可套用的來源
填入「名稱」與「來源」就可讀取本地端 *.nupkg 檔案了。
如果要安裝本地端 *.nupkg 檔案
點選「工具」「NuGet 套件管理員」「管理方案的 NuGet 套件」
點選右方展開鈕
選擇本地端的 nupkg 檔案選項
選擇前記得把自己的 *.nupkg 放到剛剛指定存放的目錄裡
等看到自己的 NuGet 專案,便可同一般 NuGet 安裝方式安裝到自己的專案內
如何自己製作 NuGet 的 *.nupkg 檔案可參考這篇:Visual Studio 2017 上 .NET Standard 超級簡單產生 NuGet 的 *.nupkg 檔案方式
2018年3月1日 星期四
Windows Server 2016 開機自動啟動程式
把程式的捷徑放在下列目錄內:
C:\Users\使用者帳號\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
每次開機便會自動開啟你的程式
C:\Users\使用者帳號\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
每次開機便會自動開啟你的程式
2018年1月1日 星期一
簡單介紹 C# 的 yield return
情境:
找出 1 到 n 的整數中被 x 整除的數
第一版 C# 程式碼
第一版修改原因:
1.每行顯示一個數字
2.邏輯改成被 x 乘於二整除的數
針對違反「單一責任」對程式碼進行優化
雖然執行結果正確,但是會發現一個效能問題。
EnumerableList(50, 2) 會無條件跑完 1 到 50
OutputForeachList 會跑 2,4,6...50
但是 OutputFor2(50, 2) 最多只會跑 50 次
雖然提升了維護性
為了效能
只好再對程式碼再進行一次優化
程式碼在遇到 yield return
會暫時停止 EnumerableYield 的執行
並把 currentNum 回傳到 OutputForeachList2 函式
等 OutputForeachList2 結束一個迴圈
會再次回到 EnumerableYield 函式
繼續之前的執行 EnumerableYield 函式
總結:
一般程式碼會執行到函式結束才回到上一層的函式呼叫層
yield return 能打破這個限制
暫時交出執行權
並回傳資料到上一層
找出 1 到 n 的整數中被 x 整除的數
第一版 C# 程式碼
private static void OutputFor1(int max, int divisible)
{
for (int currentNum = 1; currentNum <= max; currentNum++)
{
if (currentNum % divisible != 0)
{
continue;
}
System.Console.Write($"{currentNum} ");
}
System.Console.WriteLine();
}
第一版修改原因:
1.每行顯示一個數字
2.邏輯改成被 x 乘於二整除的數
private static void OutputFor2(int max, int divisible)
{
//
// 某數的2倍整除 & 顯示由上而下
//
#region 說明
// 改變顯示方式及運算邏輯時都改動這段程式碼
// 違反「單一職責」
#endregion 說明
int numMultiplyByTwo_ = divisible * 2;
for (int currentNum = 1; currentNum <= max; currentNum++)
{
//if (currentNum % num != 0)
if (currentNum % numMultiplyByTwo_ != 0)
{
continue;
}
//System.Console.Write($"{currentNum} ");
System.Console.WriteLine($"{currentNum} ");
}
System.Console.WriteLine();
}
針對違反「單一責任」對程式碼進行優化
private static void OutputForeachList(int max, int divisible)
{
foreach (int item in EnumerableList(max, divisible))
{
System.Console.WriteLine($"{item} ");
}
System.Console.WriteLine();
}
private static IEnumerable EnumerableList(int max, int divisible)
{
List result_ = new List();
for (int currentNum = 1; currentNum <= max; currentNum++)
{
System.Console.WriteLine($"讀取{currentNum} ");
if (currentNum % divisible != 0)
{
continue;
}
result_.Add(currentNum);
}
return result_;
}
雖然執行結果正確,但是會發現一個效能問題。
EnumerableList(50, 2) 會無條件跑完 1 到 50
OutputForeachList 會跑 2,4,6...50
但是 OutputFor2(50, 2) 最多只會跑 50 次
雖然提升了維護性
為了效能
只好再對程式碼再進行一次優化
private static void OutputForeachList2(int max, int divisible)
{
foreach (int item in EnumerableYield(max, divisible))
{
System.Console.WriteLine($"{item}");
}
System.Console.WriteLine();
}
private static IEnumerable EnumerableYield(int max, int divisible)
{
for (int currentNum = 1; currentNum <= max; currentNum++)
{
System.Console.WriteLine($"讀取:{currentNum} ");
if (currentNum % divisible != 0)
{
continue;
}
yield return currentNum;
}
}
程式碼在遇到 yield return
會暫時停止 EnumerableYield 的執行
並把 currentNum 回傳到 OutputForeachList2 函式
等 OutputForeachList2 結束一個迴圈
會再次回到 EnumerableYield 函式
繼續之前的執行 EnumerableYield 函式
總結:
一般程式碼會執行到函式結束才回到上一層的函式呼叫層
yield return 能打破這個限制
暫時交出執行權
並回傳資料到上一層
2017年4月1日 星期六
C# 6.0 的 string 與 $ 符號的應用
現在 Visual Studio 2015 後支援 C# 6.0
string 出現了 $ 符號的應用。
原來字串組合是這麼寫的:
public string ID { set; get; }
public string Name { set; get; }
public string FullName = string.Format("{0}-{1}", ID, Name);
現在可以這樣寫:
public string ID { set; get; }
public string Name { set; get; }
public string FullName = $"{ID}-{Name}";
兩種寫法是一樣的,但是卻大大的增加可讀性。
string 出現了 $ 符號的應用。
原來字串組合是這麼寫的:
public string ID { set; get; }
public string Name { set; get; }
public string FullName = string.Format("{0}-{1}", ID, Name);
現在可以這樣寫:
public string ID { set; get; }
public string Name { set; get; }
public string FullName = $"{ID}-{Name}";
兩種寫法是一樣的,但是卻大大的增加可讀性。
2017年3月1日 星期三
sealed class 禁止繼承
實做上
通常建立一些管理物件
為了統一控管
不想被多個物件操作
我們可以利用 sealed class 的關鍵字
禁止其他類別繼承 sealed class
藉此操作物件內的資料
以下是 sealed class 的用法
只要繼承 S3Mgr 就會編譯錯誤
通常建立一些管理物件
為了統一控管
不想被多個物件操作
我們可以利用 sealed class 的關鍵字
禁止其他類別繼承 sealed class
藉此操作物件內的資料
以下是 sealed class 的用法
sealed public class S3Mgr
{
....
}
只要繼承 S3Mgr 就會編譯錯誤
訂閱:
文章 (Atom)
Visual Studio 2017/2019 推薦的擴充功能與更新
參考文章: 覺得 Google 的 Blogger 不太順手?透過 HTML 的 iframe 移花接木 HackMD
-
最近電腦沒在操作,CPU 風扇一直高速在運轉,查了一下工作管理員,發現 WMI Provider Host 一直占用著 CPU。 檢查一下「事件檢視器」應用程式及服務紀錄檔\Microsoft\Windows\WMI-Activity\Poerational,發現有錯誤一...
-
當無法修復或解除安裝 Visual Studio 時, 可以透過 InstallCleanup.exe 工具來移除所有安裝的 Visual Studio。 InstallCleanup.exe 工具所在的目錄: C:\Program Files (x86)\Micros...






