class LogUtil<T> : ILogUtility
{
log4net.ILog log;
public LogUtil()
{
log = log4net.LogManager.GetLogger(typeof(T).FullName);
}
public void Log(LogType logtype, string message)
{
Console.WriteLine("logging coming from class {0} - message {1} " , typeof(T).FullName, message);
}
}
public class Logger
{
ILogUtility _logutility;
public Logger(ILogUtility logutility)
{
_logutility = logutility;
}
public void Log(LogType logtype, string message)
{
_logutility.Log(logtype, message);
}
}
我需要的功能是靈活的,並有能力在將來刪除LogUtil類,並使用其他的東西。更好的方式來寫封裝類來獲得鬆耦合
所以我寫LoggerUtility包裝類,如下所示:
class LoggerUtility<T>
{
public Logger logger
{
get
{
LogUtil<T> logutil = new LogUtil<T>();
Logger log = new Logger(logutil);
return log;
}
}
}
我的客戶端代碼如下:
public class TestCode
{
public void test()
{
new LoggerUtility<TestCode>().logger.Log(LogType.Info, "hello world");
}
}
我編碼記錄器屬性,它可能不乾淨。
您可以看到下面的行看起來不乾淨。
new LoggerUtility<TestCode>().logger.Log(LogType.Info, "hello world");
有沒有更好的方法來編寫客戶端代碼?我想與LogUtil鬆散耦合,而不是直接在我的客戶端代碼中使用它。
請讓我知道。
感謝
爲什麼不直接對抗'LogUtil'實現的'ILogUtil'接口的代碼? –
Lee
2012-04-24 19:30:44
我該怎麼做? – 2012-04-24 20:45:19
讓記錄器的客戶端依賴'ILogUtil'而不是'LogUtil',即'ILogUtil logger = GetLogger();'而不是'LogUtil = GetLogger();'。然後,如果需要,可以更改實現。或者,您可以直接依賴log4net(或其ILog接口),因爲您不太可能需要更改記錄器實現。 –
Lee
2012-04-24 21:06:42