Thanks I will try this. I gather the AddFactory<TOutput,TFactory> method for the Factory facility doesn't allow to override the lifestyle of the output though? That's how I initially started adding this functionality.
Daniel On 23 Mar, 17:09, Mauricio Scheffer <[email protected]> wrote: > 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 -~----------~----~----~----~------~----~------~--~---
