В частности, если я использую NInject для создания группы объектов, связанных в одноэлементной области, я ожидаю, что NInject освободит их в обратном порядке.
У меня есть следующий тестовый пример, я хочу знать, что я делаю что-то не так, или если в NInject2 есть ошибка.
Я ожидаю увидеть, что, учитывая, что я создал экземпляр Foo, а затем экземпляр Bar, NInject должен выпустить Bar прежде, чем выпустит Foo! Почему он этого не делает?
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