Вопросы по настройке Unity с синглетами - ASP.NET MVC3 - PullRequest
1 голос
/ 15 февраля 2012

Мы использовали Unity для наших приложений ASP.NET MVC3. Конфигурация выполняется исключительно в файле web.config. Смотрите пример ниже, где мы используем синглтон. Мы используем конструктор инъекций. Для 99% наших классов мы не используем одноэлементное свойство времени жизни. Мы смотрим на нашу производительность и обнаружили, что несколько экземпляров одного и того же класса создавались несколько раз для одного и того же запроса. Мы поняли, что вместо генерации 3000 объектов на запрос мы можем свести его к 200 объектам. У нас может быть большая проблема дизайна, но это на другой день. Мы пытаемся создать хороший кусок наших конфигураций класса Unity для использования синглтона.

<typeAlias alias="singleton"
           type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
<type type="ITMSLogger" mapTo="TMSLogger">
    <lifetime type="singleton" />
    <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
    </typeConfig>
</type>

Вопросы:

  1. При маркировке типа времени жизни для singleton этот экземпляр является общим только для конкретного пользователя или всей пользовательской базы?
  2. Помечая их как синглтоны, нужно ли нам настраивать синхронизацию для методов, чтобы избежать проблем с выполнением пользователем нескольких запросов одновременно?
  3. Что-нибудь еще, что я должен знать?

1 Ответ

3 голосов
/ 15 февраля 2012
  1. Одиночный экземпляр является общим для экземпляра контейнера. В вашем приложении должен быть только один экземпляр контейнера, поэтому, по сути, время жизни singleton создает глобально общий экземпляр.

  2. Да, все синглеты потенциально доступны многим потокам, поэтому они должны быть поточно-ориентированными.

  3. Да, не используйте XML для настройки вашего контейнера. Напишите вместо этого набор соглашений.

...