Hi, take a look at this to see if it helps: http://gist.github.com/355961 (I wasn't able to get rid of the default ctor for EsentRepository)
2010/4/4 Bailey Ling <[email protected]> > 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]<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.
