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
-~----------~----~----~----~------~----~------~--~---

Reply via email to