이것이 매우 간단하고 실종되었거나 더 많은 것이 있다면 궁금합니다.타입 정의 생성자를 사용하는 세터 주입
기본적으로, 내가하려는 것은 로거 구현을 위해 StructureMap의 setter 주입을 사용하는 것입니다. 내가 사용 StructureMap을 기원 로거의 생성자는 로거 만들기위한 Type
매개 변수를 받아 내 부트 스트랩 코드에서
public class Logger : ILogger
{
private ILog _log = null;
public Logger() { _log = LogManager.GetCurrentClassLogger(); }
public Logger(string name) { _log = LogManager.GetLogger(name); }
public Logger(Type loggerType) { _log = LogManager.GetLogger(loggerType); }
// The rest of the implementation...
}
를, I는 따라서 초기화 : 그것은 확실히 작동하지
ObjectFactory.Configure(x => {
x.FillAllPropertiesOfType<ILogger>().Use(l =>
new Logger(l.BuildStack.Current.ConcreteType));
// Further unrelated bootstrapping...
});
100 %, 그리고 그것은 아마 내 부분에 대한 완전한 이해 부족이다.
- "형식"나는 디버거를 통해 단계와 log4net 구현 드릴 다운 할 때 로거는보고있다 즉,
ILogger
이다 : 그래서 행동 제가 보는 관한 몇 가지 질문이 있습니다. 주입기가 들어있는 유형의 장치를 어떻게 얻을 수 있습니까? - StructureMap 빌드 인스턴스의 설정자 만 설정됩니다. 예를 들어, 데이터 액세스 계층에 대한 저장소 인터페이스/구현에서. 내 비즈니스 모델과 같은 다른 개체는 StructureMap 그래프에서 작성되지 않고 정상적으로 인스턴스화됩니다. StructureMap에 이들을 삽입하도록 지시 할 수있는 방법이 있습니까? 나는 그것이 존재하지 않는다고 상상한다. 어떻게 알 수 있겠는가? 그렇다면 제대로 구성된 로거 유형을 어떻게 해결할 수 있습니까? (서비스 분석기를 통해 수행자를 호출하는 방법을 알고 있는데,이 특정 필요를 위해 호출하는 방법이 아닙니다.)
- "이게 옳다고 생각하지 않습니다." 어쩌면 명명 된 인스턴스에 대해 뭔가 빠졌을까요? 부트 스트 래퍼가이 구현을 그래프로 나타낼 수 있다면, 어떻게/언제 세터를 가진 각 클래스마다 다른 인스턴스를 제공할까요?
은 어쩌면 내가 할 노력하고있어 달성하기 위해 완전히 다른/간단/더 나은 방법이, 그리고 그 제안을 환영합니다. 기본적으로 IoC 컨테이너 뒤에 로깅 구현을 추상화하고 있으며 클래스 별 로거가 필요합니다.
합니다. 그것은 단지 갈 길일 것입니다. 올바른 로거를 직접 주입하는 것만큼이나 우아하지는 않지만 작동 할 수있는 것입니다. 솔직하게 말해서, 나는 기존의 구현을 완전히 우아하게 보지 못했습니다. 클래스의 내부 로거에 대해 공개적으로 설정할 수있는 것은 바로 나와 맞지 않습니다. (참고 : 이것은 제 구현이 아니므로 부트 스트랩을 시도하는 것입니다.) – David
나는이 것을 꽤 우아하게 만들었지 만 핵심 원칙은 당신이 제안한 것과 동일합니다. My IoC 부스트 래퍼는 이제 ILoggerFactory와 기본 ILogger를 연결합니다. 이전 ILOGger는 기본 이외의 로거를 잡아낼 수 있습니다. 제안 해 주셔서 감사합니다! – David
Btw. 유형별 로거 인스턴스를 정말로 사용해야합니까? 나는 이것이 log4net의 기능이라는 것을 알고 있지만, 나는 이것을 결코 필요로하지 않았다. 개발자가 실제로 예외를 던져야하는 장소에 정보를 기록하는 경우가 종종 있습니다. 로그에 쓸 필요가없는 몇 가지 경우에는 메시지가 명확하게 표시되도록 메시지를 명확하게 표시 할 수 있습니다 (이미 스택 추적이없는 경우). 이 작업을 수행 할 수 있으면 ILogger를 다시 삽입하여 싱글 톤으로 등록 할 수 있습니다. 인생을 훨씬 쉬워줍니다. – Steven