Belvasis, you assume that my decorated implementation is a generic class, which it is not. In fact, I have many different repositories implementing IWriteRepository<>, each for a different entity type (e.g., DocumentRepository : IWriteRepository<Document>). So I think your suggestion will not work.
Joni On Mar 8, 8:52 pm, Belvasis <[email protected]> wrote: > since there are two IWriteRepository<T> Implementations it will not work > with this > configuration. Using XML it is easy to do this. I don't know the fluent API > but > i think there is a way to configure the key and the dependencies. So in the > end > and you can use container.Resolve<IWriteRepository<Document>>("repository"), > where > the SecurityRepositoryDecorator has the id="repository". > In XML it would look like this > > <component > id="repository" > service="Definition.IWriteRepository`1, Definition" > type="DecoratorImpl.SecurityRepositoryDecorator`1, DecoratorImpl" > lifestyle="transient"> > <parameters> > <Inner>${registry_impl}</Inner> > </parameters> > </component> > <component > id="registry_Impl" > service="Definition.IRepository`1, Definition" > type="NHibernateImpl.NHibernateRepository`1, NHibernateImpl" > lifestyle="transient"> > </component> > > 2010/3/8 Krzysztof Koźmic <[email protected]> > > >http://stw.castleproject.org/Windsor.Decorators.ashx > >http://ayende.com/Blog/archive/2008/10/05/windsor-ihandlerselector.aspx > > > On 3/8/2010 6:47 PM, joniba wrote: > > >> Hi Krzysztof, how would implementing the IHandlerSelector help me? How > >> will I differentiate between the initial call to (continuing the > >> example) > > >> container.Resolve<IWriteRepository<Document>>() > > >> With castle windsor's internal attempt to resolve the > >> SecurityRepositoryDecorator's "inner" parameter? > > >> Thanks > >> Joni > > >> On Mar 8, 7:17 pm, Krzysztof Koźmic<[email protected]> > >> wrote: > > >>> use IHandlerSelector > > >>> On 3/8/2010 5:59 PM, joniba wrote: > > >>>> Hi all, I'm trying to use Castle Windsor to implement decorator > >>>> chains, as per Ayende's msdn post. However, I'm using the fluent API, > >>>> and I want to know if it can be done en masse. > > >>>> Without the decorators I have: > > >>>> container.Register > >>>> ( > >>>> AllTypes.FromAssembly(assembly) > >>>> .IncludeNonPublicTypes() > > >>>> .BasedOn(typeof(IWriteRepository<>)).WithService.Base() > >>>> .Configure(component => > >>>> component.LifeStyle.Transient) > >>>> ); > > >>>> (Which works fine.) > >>>> My decorators also implement IWriteRepository<T>, and take as the > >>>> inner, an IWriteRepository<T>. For example: > > >>>> public class SecurityRepositoryDecorator<TEntity> : > >>>> IWriteRepository<TEntity> > >>>> { > >>>> private IWriteRepository<TEntity> inner; > > >>>> public SecurityRepositoryDecorator(IWriteRepository<TEntity> > >>>> inner) > >>>> { > >>>> this.inner = inner; > >>>> } > >>>> } > > >>>> Is this impossible because of a circular reference to > >>>> IWriteRepository<>? > >>>> I would like to get to: > > >>>> var repository = container.Resolve<IWriteRepository<Document>>(); > > >>>> And have this return a SecurityRepositoryDecorator wrapping a > >>>> DocumentRepository. > >>>> Any ideas are appreciated. > > >>>> Joni > > > -- > > 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.
