Ограничить время жизни экземпляра одной итерацией - PullRequest
1 голос
/ 30 июля 2010

Я работаю над веб-приложением, которое использует несколько сервисов для синхронизации данных с внешними ресурсами. Приложение и службы используют один и тот же уровень данных и используют Castle Windsor для реализации IoC.

В веб-приложении существует стиль жизни PerWebRequest, который ограничивает время существования экземпляра временем существования запроса. Я хочу использовать нечто подобное в сервисах. Службы запускаются время от времени для выполнения синхронизации. Я хочу, чтобы службы и репозитории в слое данных были единичными в одной итерации службы, аналогично образу жизни PerWebRequest в веб-приложении.

Я придумал концепцию Run . Прогон - это одиночный вызов кода синхронизации внутри службы. Это выглядит так:

   using( _runManager.Run() )
   {
      var sync = _usageRepoFactory.CreateInstance();
      sync.SynchronizeUsage();
   }

Реализация IRun освободит все экземпляры с разрешенным PerRunLifeStyle с момента его создания, когда он будет расположен, в конце блока using. Этот код выглядит довольно чистым, но мне интересно, есть ли лучший способ сделать это. Я пытался использовать дочерние контейнеры, но после профилирования решения они оказались довольно «тяжелыми»

Любые отзывы приветствуются. При необходимости я также могу опубликовать реализацию IRun.

Обновление

Основываясь на комментариях, я немного очистил код. Я ввел новый сервис IRunManager, который в основном является фабрикой для IRun. Я также начал использовать фабрику, чтобы избавиться от вызова ServiceLocator.

1 Ответ

0 голосов
/ 17 декабря 2010

Взгляните на этот контекстный образ жизни

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...