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
어떻게해야합니까? –
Logger의 클라이언트가'LogUtil'대신에'ILOGUtil'에 의존하게하려면'LogUtil = GetLogger();'대신'ILOGUtil logger = GetLogger(); 필요한 경우 구현을 변경할 수 있습니다. 또는 로거 구현을 변경하지 않아도되기 때문에 log4net (또는 ILOG 인터페이스)에 직접 의존 할 수 있습니다. –
Lee