В настоящее время мы оцениваем, можем ли мы использовать Ninject для будущих проектов. Одним из условий является то, что libary НЕ должен принуждать нас вызвать метод Dispose. Итак, действительно ли это необходимо? Не будет ли это вызвано утечками памяти и другими уродливыми вещами?Нужен ли метод Ninject Dispose?
ответ
Я не думаю, что Ninject, будучи чисто управляемым решением, будет иметь проблемы с утечками памяти или другими вещами, если вы не вызываете Dispose(). Тем более, что вы просто вызываете метод Dispose() ядра как одну из последних вещей, которые вы делаете до завершения приложения, так что память будет исправлена GC или OS-изоляцией процесса в любом случае.
Причина, по которой вам нужен контейнер IoC, который позволяет вам вызвать Dispose(), заключается в том, что он вызывается Dispose() для любых поставщиков услуг, которые реализуют IDisposable. Я считаю, что это полезная функция, поскольку поставщики услуг могут владеть неуправляемыми ресурсами или ждать, пока асинхронные операции будут завершены (или, по крайней мере, отменят их упорядоченным образом).
Я пошел бы так далеко и ставлю, что это причина большинства контейнеров IoC, которые реализуют IDisposable в своем классе kernel/provider/locator.
Почему у вас есть проблема с Dispose() на контейнере IoC? До сих пор я всегда находил подходящее место для его вызова, будь то в консольном приложении, приложении WPF на основе XAML или в игре Xbox.
Dispose не проблема для меня, но, очевидно, проблема для некоторых других парней. –
Вы вызываете Dispose в ядре ровно один раз во всем приложении. В чем проблема? –
Тогда я верю, что было бы неплохо узнать, в чем проблемы этих других парней. В случае, если они рассматривают ID-код запаха кода, у вас уже есть веские аргументы в пользу того, почему это имеет смысл с точки зрения дизайна. – Cygon
Вы можете настроить Ninject таким образом, чтобы помочь вам с Dispose. Это зависит от того, что scope и что стратегия вы используете с Ninject. Например:
- Ninject disposes every Disposable object that has another scope other than
InTransientScope
as soon as the scope object to which the created object is tied is collected by GC., - Одиночки будут захоронены, когда ядро утилизации,
- Также вы можете использовать
OnDeactivation
метод илиInScope(x => new DisposableStrategy())
- Или использовать
StandardScopeCallbacks.Request
, чтобы сделать ваш объект распоряжатьсяHttpRequest
. Это полезно для веб-приложений.
- 1. Руководство для Dispose() и Ninject
- 2. Ninject Transient Scope с Dispose
- 3. Использует ли метод .dispose() вообще?
- 4. Зачем нужен метод HttpListener Start Dispose stuff for exception?
- 5. Ninject с сервисом WCF - Dispose() не уволен
- 6. Dispose singleletons при выходе приложения с Ninject
- 7. Должен ли я реализовать метод Dispose?
- 8. IEnumerator: Нормально ли иметь пустой метод Dispose?
- 9. Dispose Метод управления JavaFX
- 10. C# абстрактный Dispose метод
- 11. Java График Dispose Метод
- 12. Не нужен ли метод toString?
- 13. Как расширить метод Dispose WinForm?
- 14. WCF с помощью Ninject Dispose не вызывая в requestscope
- 15. Ninject, возвращающий метод
- 16. Объект, который вызывает метод Dispose
- 17. Метод автозавода для Ninject
- 18. Консольное приложение с MVC, Ninject и WCF Service (Dispose issue?)
- 19. Лучший метод Dispose (через ComponentModel.IContainer?)
- 20. шаблон сущности и репозитория с ninject, Dispose Issue
- 21. Ninject эквивалент Unity RegisterInstance метод
- 22. Многопоточный синглтон: нужен ли метод экземпляра мьютекса?
- 23. OOP Javascript - нужен ли метод «получить собственность»?
- 24. Нужен ли экземпляру Fancybox метод повторной инициализации?
- 25. Инъекционный метод установки отложенного Ninject
- 26. Можно ли использовать метод Dispose без реализации интерфейса IDisposable?
- 27. Нужно ли использовать промежуточный метод «dispose()» в ActionListener?
- 28. Будет ли SqlBulkCopy Закрыть метод commit/Dispose внешней транзакции?
- 29. Можно ли вызвать виртуальный метод из Dispose или деструктора?
- 30. Если в блоке «using» возникает исключение, вызван ли метод Dispose?
Вы никогда не вынуждены звонить в распоряжение. Не вызывая его, он не вызывает утечек, финализатор очищается после вас. Вы просто живете, лень, с которым вы можете легко обойтись, покупая более дорогие компьютеры. –