이것도 짜증이납니다- 건조 하지 않습니다
사실입니다. 그러나 당신이 가진 모든 유형에 널리 퍼져있는 교차 절단 문제에 대해 당신이 할 수있는 일은 너무나 많습니다. 당신은해야 사용할 당신이 그 유형에 대한 속성을 가지고 있어야하므로, 사방 로거.
그래서 우리가 그것에 대해 무엇을 할 수 있는지 봅시다.
하나씩 일어나는 것
싱글 톤은 끔찍 <flame-suit-on>
합니다.
두 번째 예제에서 한 것처럼 속성 주입을 고수하는 것이 좋습니다. 이것은 마법에 의지하지 않고 할 수있는 최고의 팩토링입니다. 싱글 톤을 통해 숨기는 것보다 명시적인 종속성을 갖는 것이 좋습니다.
그러나 싱글 톤이 당신이해야 할 모든 리팩토링을 포함하여 상당한 시간을 절약한다면 (수정 구슬 시간!), 나는 당신이 그들과 함께 살 수있을 것이라고 생각합니다. Singleton에 대한 용도가 있다면 이것이 그럴 수도 있습니다. 당신이 경우 마음에 비용을 유지 이제까지 이수록 높은 약이 될 것입니다 당신의 마음을 변경하고 싶습니다.
이렇게하면 패턴 (설명 참조)을 사용 하는Registry
다른 사람들의 답변 과 싱글 톤 로거 인스턴스가 아닌 (재설정 가능한) 싱글 톤 팩토리를 등록하는 사람들의 답변을 확인하십시오 .
많은 타협없이 잘 작동 할 수있는 다른 대안이 있으므로 먼저 확인해야합니다.
Visual Studio 코드 조각
Visual Studio 코드 조각 을 사용 하여 반복되는 코드의 진입 속도를 높일 수 있습니다. 와 같은 것을 입력 할 수 logger
tab있으며 코드가 마술처럼 나타납니다.
AOP를 사용하여 건조
PostSharp와 같은 AOP (Aspect Oriented Programming) 프레임 워크를 사용 하여 일부를 자동 생성 하여 속성 주입 코드를 약간 제거 할 수 있습니다.
완료되면 다음과 같이 보일 수 있습니다.
[InjectedLogger]
public ILogger Logger { get; set; }
또한 메서드 추적 샘플 코드 를 사용 하여 메서드 시작 및 종료 코드 를 자동으로 추적 할 수 있으므로 일부 로거 속성을 모두 함께 추가 할 필요가 없습니다. 클래스 수준 또는 네임 스페이스 전체에서 속성을 적용 할 수 있습니다.
[Trace]
public class MyClass
{
}
#if DEBUG
[assembly: Trace( AttributeTargetTypes = "MyNamespace.*",
AttributeTargetTypeAttributes = MulticastAttributes.Public,
AttributeTargetMemberAttributes = MulticastAttributes.Public )]
#endif