티스토리 뷰

카테고리 없음

[C # -4.0] Castle Windsor가있는 Log4Net

필살기쓰세요 2021. 1. 13. 20:01

사용자 지정

종속성 해결 프로그램을

통해이 작업을 수행 할 수 있습니다 .먼저 다음

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를 참조하십시오.


또한-다시 생각할 가치가 있습니다.

이 경우 코드와 외부 소스간에 추상화를 생성하는 것이 좋지만이 경우에는 수행하지 않을 것이며 그 이유를 설명하겠습니다.

  1. 내 경험상 코드가 실행되고 실행 된 후 로깅 프레임 워크를 실제로 변경하지 않습니다. 특히 성숙하고 우수한 프레임 워크로 작업하고 있기 때문에- Log4Net. 그것은 많은 내장 기능을 가지고 있으며 필요에 따라 매우 적응할 수 있습니다. 메시지의 다른 형식에서 데이터베이스, 파일과 같은 다른 소스로 로그를 출력하는 것까지, 그리고 내가 틀리지 않은 경우 탄력적 검색과 같은 것을위한 추가자가 있습니다.
  2. 당신은 사용 Castle Windsor과 좋은 통합을 가지고있는 Log4Net및 제작 준비가 당신을 위해 가지고 Logging FacilityLog4Net. 추가하는 것이 얼마나 간단한 지이 질문참조하십시오 .
  3. 마지막 요점은 이미 좋은 SOLID 코드를 작성하고 ILogger특정 구현이 아닌 모든 구성 요소에 대해 로거를 전달 하는 경우 다른 성숙한 로깅 프레임 워크가 가질 수 있는 다른 Debug/ Info/ Warn/ Error/ Fatal메서드를 호출하는 것입니다. . 그래서 그날 당신은 변경해야 할 것입니다 (내 생각에 일어나지 않을 것이라고 생각합니다) Log4Net의 인터페이스와 비슷한 인터페이스를 작성하고 그것을 새로운 로깅 프레임 워크에 적응시킬 구현을 작성할 수 있습니다.



출처
https://stackoverflow.com/questions/39914893

댓글
공지사항
Total
Today
Yesterday
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30