Вопросы по настройке Unity с синглтонами — ASP.NET MVC3

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

<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. Что-нибудь еще, о чем я должен знать?

person Elim99    schedule 15.02.2012    source источник


Ответы (1)


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

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

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

person Mark Seemann    schedule 15.02.2012