title: Castle Windsor PerWebRequest LifeStyle and Application_EndRequest
body: <p>I'm registering some components related to Linq2Sql using PerWebRequest lifestyle.  I see them get created, but they get destroyed before my global's Application_EndRequest method gets called.  Is that by design?  Does anyone know a work around?  I want to call commit on my UnitOfWork object to submitchanges() at the end of every request.  In addition to using the Global.asax Application_EndResult, I've also tried an IHttpModule with the same results.</p>
  
  <p>I'm using Castle 2.0.</p>
  
  <p>Here's how I'm registering my stuff with PerWebRequest.  I am creating a DataCOntextProvider object that holds onto a L2S DataContext.  That object is injected into the UoW.</p>
  
  <pre><code>/// &lt;summary&gt;
          /// Register the IUnitOfWorkManager to resolve to LinqToSqlUnitOfWorkManager per web request
          /// &lt;/summary&gt;
          public void RegisterLinq2SqlUnitOfWorkPerWebRequest()
          {
              _container.Register(Component.For&lt;IUnitOfWorkManager&gt;()
                .LifeStyle.PerWebRequest
                .ImplementedBy&lt;LinqToSqlUnitOfWorkManager&gt;());
          }
  
      /// &lt;summary&gt;
      /// Register the IDataContextProvider to resolve to DataContextProvider per web request
      /// &lt;/summary&gt;
      public void RegisterDataContextProviderPerWebRequest()
      {
          _container.Register(Component.For&lt;IDataContextProvider&gt;()
            .LifeStyle.PerWebRequest
            .ImplementedBy&lt;DataContextProvider&gt;());
      }
  </code></pre>
  
  <p>Now I am simply trying to pull the UoW from the container via the CommonServiceLocator (both CSL and Windsor Adapter are 1.0) from the EndRequest like this:</p>
  
  <pre><code> protected void Application_EndRequest(object sender, EventArgs e)
      {
          //ignore unless this is a page (.aspx) or handler (.ashx)
          if (!RequestCanHaveContext())
              return;
  
          //get the IUnitOfWork manager
          var uow = ServiceLocator.Current.GetInstance&lt;IUnitOfWorkManager&gt;();
  
          //if we have one, commit changes at the end of the request
          if (uow != null)
          {
              //don't explicitly dispose of uow or we'll get Disposed exceptions on the context
              uow.Commit();
          }
  
      }
  </code></pre>
  
  <p>Thanks,
  Corey</p>