Thanks Krzysztof, at least I know I am not going stupid. Will file a bug report now.
On May 10, 9:02 am, Krzysztof Koźmic <[email protected]> wrote: > ok, I found a test: > UseChildComponentsForParentDependenciesWhenRequestedFromChild > > however this scenario is different because there is a component in > parent container. Although the child component gets picked over parent > component, it does not cover the scenario where parent does not have the > service. So it's still a bug :) > > On 2010-05-09 22:36, Neal Blomfield wrote: > > > > > > > Not sure what I am doing wrong here as according to IOC-56 ( which has > > been applied ) the following scenario should work: > > > Register IServiceSix + implementation in parent container. > > IServiceSix impl depends on IServiceThree. > > Register IServiceThree + implementation in child container. > > Resolve IServiceSix via child container. Expected that IServiceThree > > dependency is satisfied by child container, but getting a handler > > exception: > > > Castle.MicroKernel.Handlers.HandlerException: Can't create component > > 'ServiceSix' as it has dependencies to be satisfied. > > ServiceSix is waiting for the following dependencies: > > > Services: > > - > > Castle.Windsor.Tests.SubContainers.ChildContainerSingleResolutionTestCase > > +IServiceThree which was not registered. > > > Relevant parts of the unit test shown below, full unit test is at > >http://gist.github.com/395377. Please note that uncommenting the > > commented out line in the gist makes the test pass. > > > using NUnit.Framework; > > > namespace Castle.Windsor.Tests.SubContainers > > { > > [TestFixture] > > public class ChildContainerSingleResolutionTestCase > > { > > private IWindsorContainer parentContainer; > > private IWindsorContainer childContainer; > > > [SetUp] > > public void Init() > > { > > parentContainer = new WindsorContainer(); > > parentContainer.AddComponent("ServiceOne", > > typeof(IServiceOne), typeof(ServiceOneImpl)); > > parentContainer.AddComponent("ServiceTwo", > > typeof(IServiceTwo), typeof(ServiceTwoImpl)); > > parentContainer.AddComponent("ServiceSix", > > typeof(IServiceSix), typeof(ServiceSixImpl)); > > > childContainer = new WindsorContainer(); > > parentContainer.AddChildContainer(childContainer); > > childContainer.AddComponent("ServiceThree", > > typeof(IServiceThree), typeof(ServiceThreeImpl)); > > childContainer.AddComponent("ServiceFour", > > typeof(IServiceFour), typeof(ServiceFourImpl)); > > childContainer.AddComponent("ServiceFive", > > typeof(IServiceFive), typeof(ServiceFiveImpl)); > > } > > > [Test] > > public void > > ResolveComplexServiceRegisteredInParentWithDependenciesRegisteredInChild() > > { > > IServiceThree serviceThree = > > childContainer.Resolve<IServiceThree>(); //Proves that IServiceThree > > can be resolved via child > > Assert.IsNotNull( serviceThree ); > > Assert.IsInstanceOf<ServiceThreeImpl>( serviceThree ); > > IServiceSix serviceSix = > > childContainer.Resolve<IServiceSix>(); // This line fails =( > > Assert.IsNotNull( serviceSix ); > > Assert.IsNotNull( serviceSix.GetServiceThree() ); > > > Assert.IsInstanceOf<ServiceThreeImpl>( serviceSix.GetServiceThree() ); > > } > > > public interface IServiceOne { } > > > public class ServiceOneImpl : IServiceOne { } > > > public interface IServiceTwo > > { > > IServiceOne GetServiceOne(); > > } > > > public class ServiceTwoImpl : IServiceTwo > > { > > private readonly IServiceOne serviceOne; > > > public ServiceTwoImpl(IServiceOne serviceOne) > > { > > this.serviceOne = serviceOne; > > } > > > public IServiceOne GetServiceOne() > > { > > return serviceOne; > > } > > } > > > public interface IServiceThree { } > > > public class ServiceThreeImpl : IServiceThree { } > > public class ServiceThreeAImpl : IServiceThree { } > > > public interface IServiceFour > > { > > IServiceThree GetServiceThree(); > > } > > > public class ServiceFourImpl : IServiceFour > > { > > private readonly IServiceThree serviceThree; > > > public ServiceFourImpl(IServiceThree serviceThree) > > { > > this.serviceThree = serviceThree; > > } > > > public IServiceThree GetServiceThree() > > { > > return serviceThree; > > } > > } > > > public interface IServiceFive > > { > > IServiceOne GetServiceOne(); > > } > > > public class ServiceFiveImpl : IServiceFive > > { > > private readonly IServiceOne serviceOne; > > > public ServiceFiveImpl(IServiceOne serviceOne) > > { > > this.serviceOne = serviceOne; > > } > > > public IServiceOne GetServiceOne() > > { > > return serviceOne; > > } > > } > > > public interface IServiceSix > > { > > IServiceThree GetServiceThree(); > > } > > > public class ServiceSixImpl : IServiceSix > > { > > private readonly IServiceThree serviceThree; > > > public ServiceSixImpl(IServiceThree serviceThree) > > { > > this.serviceThree = serviceThree; > > } > > > public IServiceThree GetServiceThree() > > { > > return serviceThree; > > } > > } > > } > > } > > -- > You received this message because you are subscribed to the Google Groups > "Castle Project Users" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group > athttp://groups.google.com/group/castle-project-users?hl=en. -- You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en.
