これは、次のようにアサートしようとするとObjectDisposedExceptionで失敗します。
[Test]
public void Resolve_SingletonAndDisposeChildContainer_ShouldNotDisposeSingleton()
{
// arrange
var container = new WindsorContainer();
container.AddFacility<TypedFactoryFacility>();
container.Register(Component.For<ISomeFactory>().AsFactory());
container.Register(Component.For<A>());
// uncomment the line below and the test will not fail
//container.Resolve<ISomeFactory>();
var childContainer = new WindsorContainer();
container.AddChildContainer(childContainer);
// act
var someFactory = childContainer.Resolve<ISomeFactory>();
container.RemoveChildContainer(childContainer);
childContainer.Dispose();
someFactory = container.Resolve<ISomeFactory>();
// assert
Assert.That(someFactory.Create(), Is.Not.Null);
}
その理由は(おそらく)シングルトンがライフスタイルマネージャーによって子コンテナーで処理されるため、破棄されるためです。これにより、MVC Web APIでの子コンテナーの処理に問題が発生するため、解決策を見つけることに熱心に取り組んでいます。
誰かがこの問題のクリーンな解決策を知っていますか?