与えられた
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"/>
SVNから構築されたCastleのバージョンを使用します。Webページコードの場合:
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に残っていることがわかりました。
私はこの問題に遭遇した最初の人ではありません