로깅 및 로깅 프레임 워크 및 종속성 주입과 관련된 모범 사례가 무엇인지 궁금합니다. 특히, 로그 할 방법이 필요한 클래스를 디자인 할 경우 종속성 주입을 염두에두고 로그인 할 수있는 인터페이스를 얻으려면 어떻게해야합니까?종속성 삽입 및 로깅 인터페이스
종속성 주입은 외부 종속성이 외부 (생성자 또는 속성 설정자)에서 주입되어야한다고 말하기 때문에 생성자에서 ILog 인스턴스를 가져와 클래스에 사용해야합니까? 옵션 종속성을 로깅하여 세터에서 가져와야합니까? 로깅 인터페이스를 변경함으로써 너무 많은 유연성을 요구하고 특정 로깅 인터페이스 (예 : 팩토리 메소드 호출을 통해 정적 ILog 변수를 작성)에 대한 의존성을 고 려해야합니까? 이 factory 메소드가 ILog 구현을 얻기 위해 컨테이너를 호출 할 수 있습니까? 아니면 초기화되는 정적 변수와 IoC 컨테이너가 초기화 될 때 초기화 충돌이 발생합니까?
나는이 일을해야합니다
public class MyService : ISomeService
{
private static readonly ILogger s_log =
LoggingFactory.GetLogger(typeof(MyService))
...
}
혹은이 :
public class MyService : ISomeService
{
protected virtual ILogger Logger {get; private set;}
public MyService(ILogger logger, [other dependencies])
{
Logger = logger;
}
}
또는이 :
public class MyService : ISomeService
{
public virtual ILogger Logger {get; set;}
public MyService()
{
}
}
다른 패턴이나 방법이 작업을 수행 할 수 있습니까? 밖에있는 사람들은 무엇입니까? 무엇이 언제 작동합니까?
서비스 용 로거의 중요성 여부에 따라 두 번째 또는 세 번째 옵션을 선택합니다. – toad