2012-05-25 5 views
0

В настоящее время мы оцениваем, можем ли мы использовать Ninject для будущих проектов. Одним из условий является то, что libary НЕ должен принуждать нас вызвать метод Dispose. Итак, действительно ли это необходимо? Не будет ли это вызвано утечками памяти и другими уродливыми вещами?Нужен ли метод Ninject Dispose?

+0

Вы никогда не вынуждены звонить в распоряжение. Не вызывая его, он не вызывает утечек, финализатор очищается после вас. Вы просто живете, лень, с которым вы можете легко обойтись, покупая более дорогие компьютеры. –

ответ

3

Я не думаю, что Ninject, будучи чисто управляемым решением, будет иметь проблемы с утечками памяти или другими вещами, если вы не вызываете Dispose(). Тем более, что вы просто вызываете метод Dispose() ядра как одну из последних вещей, которые вы делаете до завершения приложения, так что память будет исправлена ​​GC или OS-изоляцией процесса в любом случае.

Причина, по которой вам нужен контейнер IoC, который позволяет вам вызвать Dispose(), заключается в том, что он вызывается Dispose() для любых поставщиков услуг, которые реализуют IDisposable. Я считаю, что это полезная функция, поскольку поставщики услуг могут владеть неуправляемыми ресурсами или ждать, пока асинхронные операции будут завершены (или, по крайней мере, отменят их упорядоченным образом).

Я пошел бы так далеко и ставлю, что это причина большинства контейнеров IoC, которые реализуют IDisposable в своем классе kernel/provider/locator.

Почему у вас есть проблема с Dispose() на контейнере IoC? До сих пор я всегда находил подходящее место для его вызова, будь то в консольном приложении, приложении WPF на основе XAML или в игре Xbox.

+0

Dispose не проблема для меня, но, очевидно, проблема для некоторых других парней. –

+0

Вы вызываете Dispose в ядре ровно один раз во всем приложении. В чем проблема? –

+0

Тогда я верю, что было бы неплохо узнать, в чем проблемы этих других парней. В случае, если они рассматривают ID-код запаха кода, у вас уже есть веские аргументы в пользу того, почему это имеет смысл с точки зрения дизайна. – Cygon

3

Вы можете настроить Ninject таким образом, чтобы помочь вам с Dispose. Это зависит от того, что scope и что стратегия вы используете с Ninject. Например:

Смежные вопросы