С учетом
public class a : IDisposable
{
public static int counter;
public a()
{
counter++;
}
~a()
{
counter--;
}
public void Dispose()
{
}
}
При регистрации:
application_container = new WindsorContainer( );
application_container.Register( Component.For<a>( ).ImplementedBy<a>( ).LifeStyle.PerWebRequest );
Правильный материал в web.config:
<add name="PerRequestLifestyle"
type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule,
Castle.MicroKernel"/>
Использование версии Castle, построенной из SVN.
С кодом веб-страницы:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
GC.Collect( 2 );
var a = Global.application_container.Resolve<Global.a>();
Response.Write( Global.a.counter.ToString() );
}
}
Я понял, что ~ a () не вызывается, а профилировщик RedGate показывает, что a не
ссылка на него застряла в
AllComponentsReleasePolicy.instance2burden.
Я не первый, кто столкнулся с этой проблемой
http://groups.google.com/group/castle-project-users/browse_thread/thread/bd287dd66b3a9d64/f48d740621508c64?lnk=gst&q=PerWebrequest#f48d740621508c64