티스토리 뷰
사용자 지정
종속성 해결 프로그램을
통해이 작업을 수행 할 수 있습니다 .먼저 다음
ISubDependencyResolver
유형의 종속성을 해결할 수 있는 구현을 만들어야합니다
ICustomLogger
.
public class LoggerResolver : ISubDependencyResolver
{
public bool CanResolve(
CreationContext context,
ISubDependencyResolver contextHandlerResolver,
ComponentModel model,
DependencyModel dependency)
{
//We can only handle dependencies of type ICustomLogger
return dependency.TargetType == typeof (ICustomLogger);
}
public object Resolve(
CreationContext context,
ISubDependencyResolver contextHandlerResolver,
ComponentModel model,
DependencyModel dependency)
{
//We pass the requested type, e.g. ABC, to the constructor of CustomLogger
return new CustomLogger(context.RequestedType);
}
}
그런 다음이 리졸버를 다음과 같이 컨테이너에 등록해야합니다.
container.Kernel.Resolver.AddSubResolver(new LoggerResolver());
-------------------
특정 질문에 대해-두 가지 접근 방식 모두 클래스의 "범위"를 절대 벗어나지 않습니다. 처음에는 새 StackTrace를 만들고 다른 하나에서는 생성자의 선언 유형이 해당 클래스 자체입니다.그러나 유형을 수신 할 수있는 생성자를 구현
했으므로
사용하지 않는 것이 좋습니다. 현재
CustomLogger
기본 생성자로 등록되어 있습니다.
//There is no place here that you tell castle to resolve using the constructor
//that receives `ABS`
container.Register(Component.For<ICustomLogger>()
.ImplementedBy<CustomLogger>()
.LifeStyle.Transient);
매개 변수
를 전달하는 방법과 원하는 생성자를 호출하는 방법을 이해하려면 생성자 매개 변수 를 전달하는 Castle Windsor를 참조하십시오.
또한-다시 생각할 가치가 있습니다.
이 경우 코드와 외부 소스간에 추상화를 생성하는 것이 좋지만이 경우에는 수행하지 않을 것이며 그 이유를 설명하겠습니다.
- 내 경험상 코드가 실행되고 실행 된 후 로깅 프레임 워크를 실제로 변경하지 않습니다. 특히 성숙하고 우수한 프레임 워크로 작업하고 있기 때문에-
Log4Net
. 그것은 많은 내장 기능을 가지고 있으며 필요에 따라 매우 적응할 수 있습니다. 메시지의 다른 형식에서 데이터베이스, 파일과 같은 다른 소스로 로그를 출력하는 것까지, 그리고 내가 틀리지 않은 경우 탄력적 검색과 같은 것을위한 추가자가 있습니다. - 당신은 사용
Castle Windsor
과 좋은 통합을 가지고있는Log4Net
및 제작 준비가 당신을 위해 가지고Logging Facility
에Log4Net
. 추가하는 것이 얼마나 간단한 지이 질문 을 참조하십시오 . - 마지막 요점은 이미 좋은 SOLID 코드를 작성하고
ILogger
특정 구현이 아닌 모든 구성 요소에 대해 로거를 전달 하는 경우 다른 성숙한 로깅 프레임 워크가 가질 수 있는 다른Debug
/Info
/Warn
/Error
/Fatal
메서드를 호출하는 것입니다. . 그래서 그날 당신은 변경해야 할 것입니다 (내 생각에 일어나지 않을 것이라고 생각합니다)Log4Net
의 인터페이스와 비슷한 인터페이스를 작성하고 그것을 새로운 로깅 프레임 워크에 적응시킬 구현을 작성할 수 있습니다.
출처
https://stackoverflow.com/questions/39914893
댓글