有一個這樣的需求,獲取js檔案的最新版本,類似下面的代碼。此方法從一個控制器提取,原本其中的 _cache, _env通過建構式注入獲得,改為靜態方法就不能通過構造注入了。為什么大家都說DI卻不說靜態全域變數呢,感覺很多情況下全域靜態變數比單例的依賴注入方便?
private static string GetFileUrl(string folder, string fileName)
{
string key = $"AppendVersion.{folder}.{fileName}";
string value;
if (!_cache.TryGetValue(key, out value))
{
value = $"/{folder}/{fileName}";
var options = new MemoryCacheEntryOptions().AddExpirationToken(_env.WebRootFileProvider.Watch(value));
var fileInfo = _env.WebRootFileProvider.GetFileInfo(value);
if (fileInfo.Exists)
{
value += fileInfo.LastModified.ToLocalTime().ToString("?yyMMddHHmmss");
}
_cache.Set(key, value, options);
}
return value;
}
uj5u.com熱心網友回復:
靜態方法中參考宣告為靜態的變數。很顯然,有些人越是繞一下模式,越抽象就越高大上。編程應該“只做必要的事”,不要過分、過早使用多余的模式。這個理念在不同的人有不同的認識,但是我會一直強調“不作不必要的抽象,一定要避免橫切和反轉之類的空洞的做法”。
uj5u.com熱心網友回復:
橫切、反轉之類的字眼兒,其實你一看就知道,這是強調不經過靠譜的變數生命,而動態修改代碼的。你覺得把一切都說成是抽象的不需要先落地的,這種方式真的利于除錯(特別是大量高強度堆疊代碼除錯)、維護、擴展嗎?
uj5u.com熱心網友回復:
你是在說微軟嗎? 我總感覺微軟的各個新框架是在強制我們DI 有時候其實我們并不想這么做,比如我們有需求要做DI時我們自己可以去配置 一些第三方的DI框架 而不是它從底層上就開始強制了轉載請註明出處,本文鏈接:https://www.uj5u.com/net/73204.html
標籤:ASP.NET
上一篇:求助!c#wpf中獲取不到listview中的好友賬號跟昵稱
下一篇:C#撰寫一個較完整的記事本程式
