首先,我不確定我是否用好詞來形容我的問題,道歉(英文不是我的母親tong)。C#在構造函數參數中記錄「俄羅斯娃娃效應」
這是關於將記錄器添加到項目。 有人問,應該有幾個記錄器,他們應該被「動態」定義。 所以我們最終得到了具有Logger
屬性的類。
所有的構造函數都有一個額外的參數,它是使用其他業務參數傳遞給構造函數的logger
實例。當我們深入內部代碼時,對方內部的類使用相同的模式來傳遞logger
實例。
當然有效,但我不滿意。 令我感到困擾的是記錄器不屬於業務邏輯。 也許和它沒有任何關係。
-
更準確地說這是我的工作出來的那一刻:
- 還有就是接口定義伐木者功能(
LogError(string msg)
爲例)。不同的記錄器將實現這個接口。 - 接口將由所有需要執行日誌記錄的類實現。該接口有一個屬性
public ILogger LoggerPte
我用一個靜態類LoggerUtility
有[ThreadStatic]
場static ILogger CurrentLogger
和功能:
public static void SetLoggerReference(ILoggable loggableClass)
{
loggableClass.LoggerPte = CurrentLogger;
}
的爲loggable類之外,CurrentLogger定義。
在爲loggable類的構造函數,我得叫LoggerUtility.SetLoggerReference(this);
如果發現這種方式更優雅,雖然它可能被扭曲,但我想知道它是否能有可能走得更遠。 ..
我剛開始閱讀關於自定義屬性,反射和AOP。有人可以給我一個關於如何使用像[Loggable]
這樣的屬性來自動使構造函數在構造函數後調用函數SetLoggerReference(this)
而不必明確寫入代碼中的方法。 如果有可能...
看看PostSharp。他們有一個很好的解決方案,使用Aop – 2014-11-03 22:08:02
[This](https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91)文章描述了一個靈活的設計,用於構建支持AOP的解決方案。 – qujck 2014-11-04 09:12:14
PostSharp將是可以使用的東西,但這取決於我的團隊的決定。我正在尋找的是不可能的「裸」C#,這是一個答案。所以我想我會從qujck的文章中激發自己。感謝您的回答。 – 2014-12-02 09:57:59