Hi all
I am trying to implement a decorator chain for my data-access based on
IRepository<TEntity, TKey>. I have a Repository that does the data-
access (at the moment just in-memory list) [1], and I have one that
does validation [2]. On top of that, I have a specialisation of my
Repository, IUsersRepository [3], which defines another method on the
base interface. I am running on the latest trunk revision 5376.
I would like to be able to register my components using the fluent
interface - is it possible to specify, as it is via XML, the key of
the service to use as the innerRepo? If so, how? (See
http://blog.bittercoder.com/PermaLink,guid,4863e460-2985-475c-9266-80b4895e80de.aspx
for an XML-config example). I would prefer to not need to rely on the
order of registrations, apart from anything else.
I am following this blog post (
http://blog.bittercoder.com/
PermaLink,guid,63653be2-d0d4-4a0b-b3e5-a1572aad5c8b.aspx ).
I have been able to get the decorator chain working if I ask the
container for IRepository<User, int> [4]; I see my
ValidatingRepository methods get called before my data-access. But I
have not been able to get it working if I ask the container for
IUserRepository (I get an InvalidCastException - I guess this is
expected, but is it work-aroundable?).
I would like to avoid needing to use one decorated-repo and one
specialised-methods repository in my services; this strikes me as
error-prone. At the moment, my specialised methods are all to do with
fetching entities by different criteria - I suppose I could make my
Get method take a detached-criteria - that would allow me to only have
one on my interface, and eliminate the need for the specialised
interfaces. Except that I'm not allowed to because we haven't decided
to definitely use NHibernate. Perhaps if I made IRepo.Get take a
delegate or an IQueryable? Any ideas? I've been banging my head
against this all morning and wouldn't be surprised if I have tunnel
vision, and there's a different, better, approach; any suggestions are
welcomed!
What does "ForwardedTypes" mean, by the way?
Thanks in advance!
Pete
[1] - [4] can be seen at
http://utilitybase.com/paste/9003