【发布时间】:2012-01-24 06:05:59
【问题描述】:
具体来说,如果我使用 NInject 创建一堆已绑定在单例范围内的对象,我希望 NInject 以相反的顺序释放它们。
我有一个测试用例如下,我想知道是我做错了什么,还是NInject2有bug。
我希望看到这一点,鉴于我已经创建了一个 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 的“无网络”版本,因此我可以在 .NET 4.0 客户端配置文件上使用 NInject)