내 응용 프로그램의 모든 클래스에서 사용할 수있는 유틸리티 (예 : 로거)가 있다고 가정합니다. 로거가 로거를 사용하는 클라이언트 유형에 대한 정보를 저장할 수있게하려면 StockProvider
에 메시지를 기록하려면 로거가 로그 메시지와 함께 StockProvider
클래스 이름을 추가해야합니다. 그리고 StockProvider
그래서 그것의 방법에 로거를 사용할 수 있습니다클라이언트에 대한 정보를 종속성에 전달
public StockProvider (ILogger logger) {}
같은 생성자를 통해 전달 된 로거가 있습니다. logger.Log (GetType(), msg)
과 같이 로거를 사용할 때마다 형식 정보를 전달하는 것이 가장 쉽다는 것을 알고 있습니다. 내가 원했던 것은 로거가 해당 유형 정보를 로거 메소드에 전달하지 않고 해당 클라이언트 유형 정보를 가지고 있기 때문에 Log
을 호출하면 메시지에 유형 이름이 추가됩니다. 예 :
class Logger : ILogger {
public Logger (Type clientType) {
this.type = clientType;
}
public void Log(string msg)
{ Console.WriteLine(this.type.FullName + msg); }
}
같은 생성자로 전달하는 StockProvider
내부에 난 그냥
logger.Log (msg)
말할 수와 같은 다음 일 것입니다 것은 그래서 질문은 : 나는 그것이를받는 것과 같은 일반적인 방법으로 Logger
을 등록 할 수 있어요 StockProvider
또는 기타 클라이언트 유형인지 여부를 로거에 요청하는 클라이언트의 clientType
? 코드에서 널리 사용되는 일부 클래스의 예와 같이 로거를 사용했음을 유의하십시오. 또한 같은 당신은 일반적인 로거를 만들 수있는 이벤트
차갑다. 사실 나는 그런 접근법에 대해 생각했지만 타입 매개 변수없이 빠져 나갈 수 있을지 궁금해하고있었습니다. 그리고 그것이 바로 질문의 핵심입니다. 어쨌든 제안에 감사드립니다 - 깔끔한 해결책! – patryk