2013-09-20 3 views
1

У меня возникла проблема с продолжительностью жизни autofac, охватывающей весь запрос на веб-сайте asp.net.Проблема с пространством для работы Autofac с веб-форматами asp.net

Я зарегистрировать завод в авто КВС таким образом:

builder.RegisterType<DoSomethingFactory>().As<IDoSomethingFactory>().InstancePerLifetimeScope(); 

Это происходит в app_start конечно.

то у меня есть простой пользовательский элемент управления, который вызывает метод этого завода

IDoSomethingFactory doSomethingFactory = Resolver.Resolve<IDoSomethingFactory>(); 
Number.Text = doSomethingFactory.DoSomething().ToString(); 

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

В первый раз, когда я запускаю сайт, запускается конструктор для DoSomethingFactory, и есть 2 последующих вызова метода DoSomething. Второй запрос приводит к 2 вызовам метода DoSomething без нового обновления фабрики.

Если я беру экземпляр InstancePerLifetimeScope при регистрации, то фабрика создается при каждом разрешении. Большинство ответов, которые я видел для этого разговора о сайте MVC. У меня также есть сайт MVC и я использую его таким же образом, и он работает в соответствии с запросом, поэтому необходимо задать вопрос для веб-форм asp.net.

Чтобы быть ясным, я хотел бы, чтобы фабрика была создана после каждого запроса. Любая помощь или идеи будут приветствоваться.

Большое спасибо

Будет

ответ

2

Если вы хотите иметь один экземпляр вашего DoSomethingFactory каждого запроса вы должны использовать метод InstancePerHttpRequest расширения.

Из вики Autofac: WebFormsIntegration

интеграции ASP.NET добавляет специальный срок службы компонентов, что позволяет экземпляр компонента жить для жизни одного запроса HTTP. Вы можете зарегистрировать компоненты, используя метод расширения InstancePerHttpRequest() в пространстве имен Autofac.Integration.Web.

Так измените регистрации:

builder.RegisterType<DoSomethingFactory>() 
     .As<IDoSomethingFactory>() 
     .InstancePerHttpRequest(); 
Смежные вопросы