특히, NInject를 사용하여 싱글 톤 범위에 바인딩 된 개체 묶음을 만드는 경우 NInject가 역순으로 해당 개체를 릴리스해야합니다.NInject2가 올바른 순서로 개체를 처분하도록하려면 어떻게해야합니까?
다음과 같은 테스트 사례가 있는데, 내가 잘못하고 있는지, NInject2에 버그가 있는지 알고 싶습니다.
내가 Foo의 인스턴스를 만든 다음 Bar의 인스턴스를 만든다면 NInject가 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 클라이언트 프로파일에서 NInject를 사용할 수 있도록 .NET 4.0에는 "no web"버전을 사용하고 있습니다.) – Arafangion