2009-09-11 5 views
1

Теперь мои контроллеры реализуют интерфейс и внедряют реализацию репозитория, используя инфраструктуру Unity. Мой вопрос в том, являются ли эти инъекционные реализации синглтонами? Означает ли это, что все мои пользователи, попавшие в репозиторий (из контроллера), используют один и тот же экземпляр?Инъекция зависимостей от модельного репозитория - это синглтон?

ответ

0

Взятые из MSDN Unity docs ...

Время жизни объекта он строит будет соответствовать сроку службы указанный в параметрах метода. Если вы не укажете значение для времени жизни, тип регистрируется для временного срока службы, что означает, что при каждом вызове Resolve будет создан новый экземпляр ...

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

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

0

Нет, не делайте репозитории singleton, специальные в веб-приложении.

Завод-изготовитель контроллера создает репозиторий (используя Unity) и вводит их в контроллер.

+0

Я определенно не хочу одиноких игроков. Я спрашивал, являются ли реализации, введенные Unity, одиночными. – RailRhoad

+1

Не знаете о единстве, но с другими рамками вы можете контролировать «образ жизни» объекта, определяющий, являются ли они одноточечными или временными во время регистрации – ema

0

Это зависит от того, переносите ли вы некоторый сеанс ORM вместе с экземпляром вашего репозитория. Если ваш репозиторий - это всего лишь куча статических методов, чем вам небезразлично, и вы можете сделать его одиночным. В противном случае вы хотите сохранить состояние только в пределах одного веб-запроса, чтобы другие потоки запросов не мешали ему.

Единство, в отличие от других каркасов IoC. не поставляется с однопользовательским режимом работы в течение одного веб-запроса, но вы можете легко реализовать его, см. здесь, например: Singleton Per Call Context (Web Request) in Unity