There's no lifestyle defined for IPrincipal in your registration, so it's using the default (singleton). Define it as Transient and Create () will be called every time.
On Mar 23, 1:59 pm, Daniel Fernandes <[email protected]> wrote: > BTW my assumption is that a factory method is to be called whenever it > can satisfy a dependency. > I tried implementing IDisposable on the Create method output but that > didn't help. > I reverted in using Property Setter injection of the factory class and > calling Create method there. > > Daniel > > On 23 Mar, 14:37, Daniel Fernandes <[email protected]> wrote: > > > I am developing a Web application using ASP.Net MVC and CastleProject > > 1.0 RC3 amongst other things. > > In the bootstrap I set up the usual stuff, facilities, controllers, > > services and here factories. > > Most of the registered components in the container are set as > > Transient. > > I have a breakpoint at the end of the bootstrap and if I resolve a > > component that has got a property-based dependency that is resolved > > using a factory it's all well. Factory is created once and Create > > method is called each time the dependency needs resolving. In this > > case the dependency that is provided by a factory is a security > > context that implementes IPrincipal. > > > So I have : > > public class MyService : IService { > > > public MyService(IOtherService otherService) { > > ...} > > > public IPrincipal SecurityContext {get;set;} > > > } > > > MyService.SecurityContext (just after the bootstrap has finished > > setting up the application and before letting the first page to get > > rendered) will always cause a call to the factory that provides > > IPrincipal. > > > Factory facility has been registered like this: > > container.AddFacility("FactorySupportFacility", new > > FactorySupportFacility()); > > and here is the registration for the factory class and the dependency > > it's providing : > > > container.AddComponent<IPrincipalFactory> > > ("PrincipalFactory.factory"); > > container.Register( > > Component.For<IPrincipal>().AddAttributeDescriptor > > ("factoryId", "PrincipalFactory.factory").AddAttributeDescriptor > > ("factoryCreate", "Create")); > > > Now, if I load the page up and then do a refresh, IService will be > > correctly resolved via constructor injection but somehow IPrincipal > > property setter will too be called but WITHOUT having called the > > Create method on the Factory. > > If I call the container from anywhere in the application and resolve > > the service it will, too, no longer call the Create method. > > > It's all very puzzling! > > > Cheers > > Daniel Fernandes --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
