Скажем, у меня есть класс PermissionManager, который должен существовать только один раз для моей системы и в основном выполняет функцию управления различными разрешениями для различных действий в моем приложении. Теперь у меня есть некоторый класс в моем приложении, который должен иметь возможность проверять определенное разрешение в одном из своих методов. Конструктор этого класса в настоящее время является общедоступным, т. Е. Используется пользователями API.Практический вопрос о закачке Singleton & Dependency Injection
До пару недель назад, я бы просто был мой класс назвать следующие псевдо-код где-то:
PermissionManager.getInstance().isReadPermissionEnabled(this)
Но так как я заметил, что все здесь ненавидя одиночек + этот вид связи, я был интересно, какое лучшее решение было бы, поскольку аргументы, которые я прочитал против синглтонов, кажутся имеющими смысл (не проверяемый, высокая связь и т. д.).
Должен ли я действительно требовать от пользователей API передать экземпляр PermissionManager в конструкторе класса? Хотя мне нужен только один экземпляр PermissionManager для моего приложения?
Или я все об этом ошибаюсь и должен иметь непубличный конструктор и фабрику где-нибудь, которая проходит в экземпляре PermissionManager для меня?
Дополнительная информация Обратите внимание, что, когда я говорю «Dependency Injection», я говорю о DI Pattern ... Я не использую любые рамки DI как Guice или весной. (... все же)
Вопрос о инъекции через интерфейс является важным. Возможность издеваться над объектом PermissionManager в тестах - это то, что делает DI мощным подходом для более тестируемого кода. – 2008-10-29 14:53:40