カーネルがその中にあるオブジェクトをどのように処分したかを理解しようとしています。たとえば、次のコードは 2 つのスコープを作成し、スコープが同じ場合は同じオブジェクトを解決し、スコープが異なる場合は別のオブジェクトを解決することをアサートします。
[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
}
スコープが 2 つあるRedBall
ため、コンテナーには 2 つのインスタンスが保持されます。
- これらは\いつどのように削除されますか?
- コンテナ内のボールが廃棄されたことを証明するためにテストを拡張するにはどうすればよいですか?