我试图弄清楚内核如何处理其中的对象。例如,下面的代码创建了两个作用域,并断言当作用域相同时解析同一个对象,如果不同则解析不同的对象。
[Test]
public void DisposingScope()
{
var kernel = new StandardKernel();
ScopeObject scopeObject = null;
kernel.Bind<IBall>().To<RedBall>().InScope(context => scopeObject);
var scope1 = new ScopeObject();
var scope2 = new ScopeObject();
scopeObject = scope1;
var ball1A = kernel.Get<IBall>();
var ball1B = kernel.Get<IBall>();
Assert.That(ball1A, Is.SameAs(ball1B)); // <== Balls from the same scope
scopeObject = scope2;
var ball2 = kernel.Get<IBall>();
Assert.That(ball2, Is.Not.SameAs(ball1A)); // <== Balls from different scopes
}
因为我有两个范围,所以RedBall
容器中有两个实例。
- 如何\何时删除这些?
- 如何扩展测试以证明容器中的球已被处理?