Wouldn't it be easier to just register the corresponding EsentRepository on demand? i.e. when the component model is created you just register the repository and bind it to the component. Here's a prototype: http://bit.ly/9vCOA3
On Apr 4, 10:31 pm, Bailey Ling <[email protected]> wrote: > 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.For > > Key("pd").Eq("PDA")) > > > Component.For<B>().LifeStyle.Transient.ServiceOverrides(ServiceOverride.For > > Key("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%2Bun > > >> >> > [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%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%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%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%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]. For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en.
