具体的には、NInjectを使用してシングルトンスコープでバインドされたオブジェクトの束を作成すると、NInjectがそれらを逆の順序で解放することが期待されます。NInject2が正しい順序でオブジェクトを廃棄するようにするにはどうすればよいですか?
私は次のようなテストケースを持っています。何か間違っているのか、NInject2にバグがあるのかを知りたいのです。
私はFooのインスタンスを作成し、次にBarのインスタンスを作成したので、NoojectはFooをリリースする前にBarを解放する必要があります。なぜこれをやっていないのですか?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ninject;
namespace ConsoleApplication1
{
interface IFoo
{
}
interface IBar
{
}
class Foo : IFoo, IDisposable
{
public Foo()
{
System.Console.WriteLine("Created Foo Instance");
}
public void Dispose()
{
System.Console.WriteLine("Disposed Foo Instance");
}
}
class Bar : IBar, IDisposable
{
public Bar(IFoo foo)
{
System.Console.WriteLine("Created Bar Instance");
}
public void Dispose()
{
System.Console.WriteLine("Disposed Bar Instance");
}
}
class Program
{
static void Main(string[] args)
{
using (var kernel = new Ninject.StandardKernel())
{
kernel.Bind<IBar>().To<Bar>().InSingletonScope();
kernel.Bind<IFoo>().To<Foo>().InSingletonScope();
kernel.Get<IFoo>();
kernel.Get<IBar>();
}
}
}
}
実際の出力:
Created Foo Instance
Created Bar Instance
Disposed Foo Instance
Disposed Bar Instance
予想される出力:
Created Foo Instance
Created Bar Instance
Disposed Bar Instance
Disposed Foo Instance
(ちなみに、.NET 4.0では「no web」バージョンを使用していますので、.NET 4.0 Client ProfileでNInjectを使用できます) – Arafangion