In IoC you simply register everything you intend to use OR depend on, then, when you resolve for some service IDateService, for example, the best fitting c'tor is found for both your implementation of IDateService and those of its dependencies. Hence you can rebuild you object graph very easily, since the resolution of dependencies is done by the kernel/container.
So you'd do like I showed you below. -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Yannis Sent: den 26 april 2009 19:22 To: Castle Project Users Subject: Re: Question about injecting a dictionary collection About q3: But if a service needs a reference to another service is this the correct way of doing it? I mean I have never used a DI framework before so I dont know how architecture decisions change. So normally I would have a singleton service class DateService and do DateService.Instance.DoSomething() from a timeservice class method. How does this change when using castle? On Apr 26, 12:56 pm, "Henrik Feldt" <[email protected]> wrote: > 1. You can define a facility and group the services in the Init in > that and use <facility ... > in your config. > > What do you mean by "mixed up in the components element"? > > 2. Probably an overload for Resolve, since it returns T or object. > > 3: > > class SomeTimeService { public SomeTimeService(IDateService ds) { _Ds > = ds; > > } IDateService _Ds; } > > and > > Kernel.Register(Component.For<ITimeService>().ImplementedBy<SomeTimeSe > rvice> > (), > Component.For<IDateService>.ImplementedBy< AnotherTimeService >()); > > And then > > Kernel.Resolve<ITimeService>(); // will inject IDateService in c'tor > > Is this what you're asking for? You can specify the parameter ids in > both > xml: > <component ...> > <parameters> > <ds>#{another.time.service}</ds> > </parameters> > </component> > > And fluent cfg. More on castle's web site. > > -----Original Message----- > From: [email protected] > > [mailto:[email protected]] On Behalf Of Yannis > Sent: den 25 april 2009 12:29 > To: Castle Project Users > Subject: Question about injecting a dictionary collection > > Hi all, > > I am new to castle so I have a few questions: > > 1) In my config file can I somehow group the service implementations > for each service? > > e.g. > <component > id="timeService_1" service="SomeService.ITimeService, > SomeService" > type="SomeService.SomeTimeService, SomeService" /> > <component > id="timeService_2" service="SomeService.ITimeService, > SomeService" > type="SomeService.AnotherTimeService, SomeService" /> > <component > id="dateService_1" service="SomeService.IDateService, > SomeService" > type="SomeService.DateService, SomeService" /> > > Is there any way to define the time services in one place and the date > services in another (so not all mixed up in the components element > > 2) What does the method GetService do on the IWindsorContainer? > > 3) in the example above, Is there any way to get the date service to > somehow get a reference to the time services? I would like to have > access to all of them and access them through their id. Something like > someCollection["timeService_1"] to get the time service object. > However, I dont want to restrict the service to be using the castle > container. > > Thanks in advance. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
