2010-12-27 8 views
0

Logger 용 필드가있는 IDisposable이 있습니다.처분하고 싶지 않은 필드에 "DisposableFieldsShouldBeDisposedRule"결함을 피하는 방법은 무엇입니까?

class DoesNotDisposeMember : IDisposable { 
    public IDisposable Logger { get; set; } 

    public void Dispose() 
    { 
    logger = null; 
    } 
} 

Gendarme에서 DisposableFieldsShouldBeDisposedRule-Defect이 있다고보고하지만 로거를 처리하고 싶지는 않습니다.

아무도 도와 줄 수 있습니까?

+0

어 ... 무시 하시겠습니까? –

답변

2

왜 당신은 그것을 처분하고 싶지 않을까요? 처분하고 싶지 않다면, 아마 IDisposable 회원에 저장해서는 안됩니다. 해당 인터페이스의 유일한 실제 목적은 해당 항목이 폐기되었음을 나타낼 수 있도록하는 것입니다.

로깅 개체 인 경우 Stream 또는 StreamWriter에서 파생 된 기본 기본 인터페이스/클래스가 있습니까?

왜 당신이 : 나는 물론 그것은이 여전히 나는 내가 따로 할 말을 다시 우리에게 가져다 생각하는 ... 계층 구조에서 IDisposable 포함 나를 치는 것을 서면으로 작성했습니다 이제

처분 할 의사가없는 변수를 여기서 설정 하시겠습니까? 당신이 다른 곳에 버리면 아마 거기서 사용해야 할 것입니다. 로거 오브젝트를 랩핑하는 코드는 로깅을 가능하게하는 모델/비즈니스 오브젝트에 개별 인터페이스를 공개하는 것을 포함하여 모든 로깅 오브젝트 기능을 처리해야합니다.

기본적으로 다른 개체에 로깅을 캡슐화하는 경우 해당 개체 외부에서 내부 로깅 스트림 개체를 참조하면 안됩니다. 다른 곳에서 로깅을 캡슐화하지 않으면이 클래스는 적절하게 처리해야합니다.

+0

내 로거가 "클래스 MyLogger : IMyLogger {}"및 "인터페이스 IMyLogger : IDisposable {}"처럼 보이면 "class MyLogger : IMyLogger, IDisposable {}"로 변경해야합니까? – andreas

+0

만약 변경했다면,'IDisposable' 대신에'IMyLogger' 참조를 저장할 수 있습니다. IDisposable은 로깅 관련 멤버를 노출시키지 않기 때문에 어느쪽으로 든 IMyLogger를 원하는 것처럼 보입니다. –

관련 문제