Как я могу получить контейнер Windsor IoC, который может быть общим для моих классов, но не может использоваться несколькими веб-запросами? - PullRequest
0 голосов
/ 28 мая 2010

Я создаю набор библиотек классов, которые создают отчеты в формате Office Open XML, и я использую статический Windo-контейнер IoC.

Моя проблема заключается в том, что одна из возможных точек входа в систему отчетов - через веб-интерфейс, что означает, что статический IoC-контейнер систем отчетности распределяется между несколькими веб-запросами, что приводит к исключениям, так как для каждого нового запроса система отчетов пытается перерегистрировать компоненты в Виндзоре, которые уже были зарегистрированы по более раннему запросу.

Я не хочу переносить регистрацию в веб-приложение global.asax, так как моя система отчетов больше не будет автономной.

Как я могу иметь контейнер IoC Windsor, который может быть общим для моих классов отчетов, но не может использоваться несколькими веб-запросами?

Ответы [ 2 ]

2 голосов
/ 28 мая 2010

Не создавайте контейнер снова и снова. Создайте и настройте его один раз для вашего приложения в глобальной начальной точке. Вы все еще можете сделать свои компоненты автономными, инкапсулировав все регистрации в установщиках . Затем в global.asax вы будете устанавливать только инсталляторы, что довольно легко сделать, а в следующей версии Windsor 2.5 это буквально 2 строки кода.

1 голос
/ 28 мая 2010

Пробовали ли вы вариант Lifestyle для ваших компонентов. Существует опция PerWebRequestLifestyleManager и опция PerWebRequestLifestyleModule. См. здесь документацию по образу жизни. И посмотрите здесь пример, который использует параметры образа жизни.

...