Yep, I only did it without an argument to illustrate what value needs to go
into the repository.  When everything's set up properly it'll have to be an
ctor arg or property injection.

I gave a quick try at using a custom lifestyle manager.  Before it even got
to Resolve() an exception was thrown trying to satisfy the 'directory'
dependency.  I configured a dummy Parameters("directory").Eq("") to get past
that, but it looks like the ComponentModel is completely read-only when it
gets to the lifestyle manager's Resolve.

Hmmmm...maybe this is getting a little more complicated than it's worth.
Ugh...really don't wanna use the service locator....

2010/4/4 Krzysztof Koźmic <[email protected]>

> welll, first of all you need to actually inject the repo into A, not
> instantiate it directly.
>
> You also will probably require custom lifestyle that will manage
> instances per dependent type. While it's not very clean, the lifestyle
> manager is probably also the best place to add the dependency (name of
> the dictionary) to its CreationContext so that Resolver and Activator
> will later pick it up and inject into the dictionary instance.
>
> Is there a simpler way? It's late here, so I may miss something obvious.
> Krzysztof
>
> 2010/4/4 Bailey Ling <[email protected]>:
> > Thanks for the suggestion, Mauricio.  That would work, but I'm trying to
> go
> > with a more automatic way of accomplishing this.  Krzysztof's comment is
> > spot on, and sent me down the path of looking at lifestyle managers and
> > activators, but it looks like I'm going to need to write some custom
> > extension code to accomplish this.
> >
> > To be specific, this is what I want to accomplish:
> >
> > public class EsentRepository<TKey, TValue> : IRepository<TKey, TValue> {
> >   public EsentRepository(string directory) { }
> > }
> >
> > public class A {
> >   public A() {
> >     _repo = new EsentRepository(typeof(A).Name); // or any string
> directory
> > that is unique to instances of A
> >   }
> > }
> >
> > How do I inject _repo?
> >
> > Thanks again.
> >
> > 2010/4/3 Krzysztof Koźmic <[email protected]>
> >>
> >> Actually it feels to me more like you're looking after custom lifestyle.
> >>
> >> So that all instances of A get single instance of PD, all instances of
> >> B get single, but different instance of PD, etc... is that correct?
> >>
> >> 2010/4/4 Mauricio Scheffer <[email protected]>:
> >> > Like this?
> >> >
> >> > Component.For<PD>().Named("PDA")
> >> > Component.For<PD>().Named("PDB")
> >> >
> >> >
> Component.For<A>().LifeStyle.Transient.ServiceOverrides(ServiceOverride.ForKey("pd").Eq("PDA"))
> >> >
> >> >
> Component.For<B>().LifeStyle.Transient.ServiceOverrides(ServiceOverride.ForKey("pd").Eq("PDB"))
> >> >
> >> > On Apr 3, 12:11 am, Bailey Ling <[email protected]> wrote:
> >> >> That would work, if I only needed B once.
> >> >>
> >> >> I'm gonna 
> >> >> usehttp://managedesent.codeplex.com/(did<http://managedesent.codeplex.com/%28did>you
> >> >>  know Windows has
> >> >> a
> >> >> built in object database?!?) for local persistance.  The
> >> >> PersistantDictionary takes in a string argument, which is the
> directory
> >> >> path
> >> >> for where the database files are stored.
> >> >>
> >> >> I guess this is only half the question.  What I'm trying to
> accomplish
> >> >> is a
> >> >> single instance of PersistantDictionary per dependency.
> >> >>
> >> >> So if both A and B required a PD, I'd like all transients instances
> of
> >> >> A to
> >> >> get the "single" instance of PD/A, and all transients of B would get
> >> >> the
> >> >> single instance PD/B.  Does that make a little more sense?
> >> >>
> >> >> Thanks!
> >> >>
> >> >> On Fri, Apr 2, 2010 at 5:22 PM, Mauricio Scheffer <
> >> >>
> >> >>
> >> >>
> >> >> [email protected]> wrote:
> >> >> > Component.For<B>()
> >> >> >
> >> >> >
> Component.For<A>().Parameters(Parameter.ForKey("name").Eq(typeof(B).Name))
> >> >>
> >> >> > but I'm guessing that's not what you really want, right? Can you
> >> >> > further explain what you're trying to achieve?
> >> >>
> >> >> > --
> >> >> > Mauricio
> >> >>
> >> >> > On Apr 2, 5:13 pm, bling <[email protected]> wrote:
> >> >> > > class A {
> >> >> > >   public A(string name) { }
> >> >>
> >> >> > > }
> >> >>
> >> >> > > class B {
> >> >> > >   public B() {
> >> >> > >     _a = new A(typeof(B).Name);
> >> >> > >   }
> >> >>
> >> >> > > }
> >> >>
> >> >> > > Basically, that's what I'm trying to accomplish.  B has a
> >> >> > > dependency
> >> >> > > on A, but I'd like A's name to be injected with the class name of
> >> >> > > B.
> >> >> > > So it's sort of like a circular dependency, but not directly.
> >> >>
> >> >> > > ServiceOverrides, DependsOn, and DynamicProperties don't have any
> >> >> > > information about who is requesting the component.  The Factory
> >> >> > > facility supplies the CreationContext, but if I use that then I
> >> >> > > need
> >> >> > > to manually bake in other built-in features like interceptors.
> >> >>
> >> >> > > Short of writing a sub resolver is there a way to do what I want
> >> >> > > with
> >> >> > > fluent configuration?  Thanks.
> >> >>
> >> >> > --
> >> >> > 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]<castle-project-users%[email protected]>
> <castle-project-users%2Bun
> >> >> > [email protected]>
> >> >> > .
> >> >> > For more options, visit this group at
> >> >> >http://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]<castle-project-users%[email protected]>
> .
> >> > For more options, visit this group at
> >> > http://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]<castle-project-users%[email protected]>
> .
> >> For more options, visit this group at
> >> http://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]<castle-project-users%[email protected]>
> .
> > For more options, visit this group at
> > http://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]<castle-project-users%[email protected]>
> .
> For more options, visit this group at
> http://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.

Reply via email to