2015-03-10 4 views
0

Может кто-нибудь, пожалуйста, скажите мне разницу между C# Singleton Class и Ninject Singleton?Ninject Singleton vs CS Singleton

Мой текущий босс хотел бы преобразовать класс Singleton в Ninject Singleton.

Это противоречит методологии для меня, что я должен был бы определить Ninject, а не сам класс, определяющий singleton. Хотя мы используем Ninject во всем проекте, имеет смысл использовать Ninject там, где это необходимо. НО это твердо имеет смысл для меня, что класс должен определить Singleton, а не Ninject.

Заранее благодарен!

ответ

1

Существует четкое различие между двумя концепциями, о которых вы говорите.

Класс Singleton означает, что в любой момент времени существует только один экземпляр класса.

Ninject Singleton просто означает, что Ninject будет только внедрять один экземпляр класса в ваше приложение. Ничто не мешает кому-то вручную создавать свой собственный экземпляр.

Если вам действительно нужен синглтон, не полагайтесь на Ninject, чтобы сделать это за вас. Но если вы используете только то, что ваша инфраструктура DI использует один экземпляр класса для всей его инъекции, используйте Ninject.

0

Существует большая разница между Singleton design pattern и стилем Singleton Lifestyle, который имеет контейнеры. Регистрация чего-то как «singleton» в Ninject просто означает, что Ninject может создать только один экземпляр для вас.

Документация Ninject explains довольно хорошо, почему шаблон дизайна Singleton - плохая идея.

Проблема с этим в основном заключается в том, чтобы заблокировать ваш тип. Ведение дел таким образом сделает ваш код в конечном итоге жестким и негибким. В частности, это будет очень трудно единица кода теста, что это реализовано таким образом

Проблемы с шаблоном Singleton является то, что вы нарушаете принцип инверсии зависимостей делают ваш код зависит от реализации. Синглтон - это в основном ambient context, и окружающий контекст в большинстве случаев должен быть предотвращен.