PerWebRequest 라이프 스타일을 사용하는 Linq2Sql과 관련된 일부 구성 요소를 등록하고 있습니다. 나는 그것들이 생성되는 것을 본다. 그러나 전역의 Application_EndRequest 메쏘드가 호출되기 전에 그것들은 파괴된다. 그게 설계된거야? 누구든지 해결 방법을 알고 있습니까? 모든 요청 끝에 submitanges()에 내 UnitOfWork 객체에 대한 커밋을 호출하려고합니다. Global.asax Application_EndResult를 사용하는 것 외에도 동일한 결과를 가진 IHttpModule을 시도했습니다.성 Windsor PerWebRequest LifeStyle 및 Application_EndRequest
성 2.0을 사용하고 있습니다.
내 물건을 PerWebRequest에 등록하는 방법은 다음과 같습니다. L2S DataContext를 유지하는 DataCOntextProvider 객체를 생성합니다. 그 객체는 UoW에 주입된다. 이제
/// <summary>
/// Register the IUnitOfWorkManager to resolve to LinqToSqlUnitOfWorkManager per web request
/// </summary>
public void RegisterLinq2SqlUnitOfWorkPerWebRequest()
{
_container.Register(Component.For<IUnitOfWorkManager>()
.LifeStyle.PerWebRequest
.ImplementedBy<LinqToSqlUnitOfWorkManager>());
}
/// <summary>
/// Register the IDataContextProvider to resolve to DataContextProvider per web request
/// </summary>
public void RegisterDataContextProviderPerWebRequest()
{
_container.Register(Component.For<IDataContextProvider>()
.LifeStyle.PerWebRequest
.ImplementedBy<DataContextProvider>());
}
은 단순히이 같은 EndRequest 이벤트에서 (CSL과 윈저 어댑터 모두 1.0이다)을 CommonServiceLocator를 통해 컨테이너에서 UOW를 끌어하려고 :
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<IUnitOfWorkManager>();
//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();
}
}
감사합니다, 코리
http://groups.google.com/group/castle-project-users/browse_thread/thread/b8f52a3640ffb654 –
모듈의 최종 요청 처리기가 구성 요소 삭제 전에 실행되는지 확인 했습니까? 또한, 어디에서/어떻게 커널의 파괴 된 사건을 다루고 있습니까? –