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");
}
}
Я кодирования Logger свойство, которое не может быть чистым.
, как вы можете видеть, следующая строка не выглядит чистой.
new LoggerUtility<TestCode>().logger.Log(LogType.Info, "hello world");
Есть ли лучший способ написать код клиента? Я хочу иметь свободное соединение с LogUtil и не использовать его прямо в моем клиентском коде.
Пожалуйста, дайте мне знать.
Благодаря
Почему не просто код против 'интерфейса ILogUtil' реализуемого' 'LogUtil? –
Lee
как это сделать? –
У клиентов клиента зависит от 'ILogUtil' вместо' LogUtil 'i.e.' ILogUtil logger = GetLogger(); 'вместо' LogUtil = GetLogger(); '. Затем вы можете изменить реализацию, если вам нужно. В качестве альтернативы вы можете просто напрямую зависеть от log4net (или интерфейса '' ILog'), поскольку вам вряд ли понадобится изменить вашу работу с регистратором. –
Lee