2012-05-25 4 views
0

현재 Ninject를 향후 프로젝트에 사용할 수 있는지 평가 중입니다. 하나의 조건은, libary가 Dispose 메서드를 호출하도록 강요해서는 안된다는 것입니다. 그래서, 정말 필요한가요? 메모리 누수와 다른 추악한 결과를 초래하지 않을까요?Ninject의 Dispose 메서드가 정말로 필요합니까?

+0

당신은 절대로 처분을 부르지 않습니다. 그것을 부르지 않으면 결코 누출이 일어나지 않으며, 최종자가 당신 후에 청소를합니다. 당신은 더 비싼 컴퓨터를 구입하여 쉽게 해결할 수있는 뚱뚱한 게으름을 피우는 것입니다. –

답변

3

순수하게 관리되는 솔루션 인 Ninject는 Dispose()를 호출하지 않으면 메모리 누수 또는 다른 문제가 발생하지 않는다고 생각합니다. 특히 응용 프로그램을 종료하기 전에 마지막으로 수행 한 작업 중 하나 인 커널의 Dispose() 메소드 만 호출하므로 GC 또는 OS의 프로세스 분리로 인해 메모리를 회수 할 수 있습니다.

Dispose()를 호출 할 수있는 IoC 컨테이너가 필요한 이유는 IDisposable을 구현하는 모든 서비스 공급자에서 Dispose()를 호출하기 때문입니다. 유용한 기능 중 하나는 서비스 제공 업체가 관리되지 않는 리소스를 소유하거나 비동기 작업이 완료 될 때까지 기다려야한다는 것입니다 (또는 적어도 이상한 순서로 중단해야 함).

나는 이것이 커널/provider/locator 클래스에 IDisposable을 구현하는 대부분의 IoC 컨테이너 뒤에있는 이유라고 생각합니다.

IoC 컨테이너에서 Dispose()를 사용하는 데 문제가있는 이유는 무엇입니까? 지금까지 콘솔 응용 프로그램, XAML 기반 WPF 응용 프로그램 또는 Xbox 게임에서 항상 호출 할 적절한 위치를 찾았습니다.

+0

Dispose는 저에게는 문제가 아니지만 다른 사람들에게는 분명히 문제입니다. –

+0

전체 응용 프로그램에서 정확히 한 번만 Dispose를 커널에 호출합니다. 문제가 어디에 있습니까? –

+0

그러면 다른 사람들의 관심사가 무엇인지 알아내는 것이 좋습니다. IDisposable 코드 냄새라고 생각하는 경우에는 디자인 관점에서 이해가가는 이유에 대해 이미 좋은 추론을하고 있습니다. – Cygon

3

Dispose를 돕기 위해 Ninject를 구성 할 수 있습니다. 그것은 무엇에 따라 달라집니다 범위 무엇 전략 당신은 Ninject와 함께 사용합니까. 예를 들어 : 커널이 폐기 될 때

  • 싱글 톤이 배치됩니다

  • 관련 문제