That's good stuff. I have other kinds of services that will benefit
from automatic registration, so a facility is indeed a better idea.
Thank you!

As for Binsor, I need to take some time and learn boo syntax. Guessing
and copying from examples doesn't work in the long run :).

Thanks again.

On Feb 26, 5:49 pm, Nathan Stott <[email protected]> wrote:
> Well I couldn't find my binsor to do it, but I use this facility in one of
> my projects which will accomplish what you want.  You could convert it to
> Boo and put it in your binsor if you want or you can just modify this
> facility and call it from Binsor.  Hope this helps.
>     public class NHRepositoriesFacility : AbstractFacility
>     {
>         protected override void Init()
>         {
>          Predicate<Type> isGenericRepositoryInterface =
>          type =>
>          type.GetInterfaces().Contains(
>          x => x.IsGenericType &&
> x.GetGenericTypeDefinition().IsAssignableFrom(typeof (IRepository<>)));
>
>          var types =
>          Assembly.GetAssembly(typeof (IRepository<>)).GetTypes().Concat(
>          typeof (ClassifiedAdRepository).Assembly.GetTypes());
>
>          var repositoryInterfaces = types.Where(
>          type => type.IsInterface && !type.IsGenericTypeDefinition &&
> isGenericRepositoryInterface(type));
>
> repositoryInterfaces.ForEach(interfaceType =>
>                              {
> var implementor = types.FirstOrDefault(type =>
> interfaceType.IsAssignableFrom(type) && !type.IsAbstract);
> if (implementor == null) return;
>
> var genericRepositoryInterfaceTypes = implementor.GetInterfaces().Where(
> x =>
> x.IsGenericType &&
> x.GetGenericTypeDefinition().IsAssignableFrom(typeof(IRepository<>)));
>
> Kernel.Register(Component.For(interfaceType).ImplementedBy(implementor).Forward(genericRepositoryInterfaceTypes));
>                              });
>         }
>     }
>
> If I had more time I'd make the conversion to boo for you, but it may be
> better as a facility anyway :).  The conversion to boo should be relatively
> easy if you spend some time on it if you want to go that route.
>
> On Thu, Feb 26, 2009 at 9:56 AM, Nathan Stott <[email protected]> wrote:
> > The tests are indeed the best source of binsor documentation.
> > I'll look for that code.  Should be able to find it soon.  It's just a
> > matter of using reflection appropriately.
>
> > On Thu, Feb 26, 2009 at 9:54 AM, Bergius <[email protected]> wrote:
>
> >> Thank you for your reply.
>
> >> That is exactly what I want to achieve, and I'd really appreciate if
> >> you would dig up that code.
>
> >> Are the tests the best source for Binsor documentation, or is there a
> >> hidden documentation cache somewhere? :)
>
> >> On Feb 26, 4:40 pm, Nathan Stott <[email protected]> wrote:
> >> > You have to follow conventions and register based upon them if you want
> >> to
> >> > pull this off.
> >> > If I am understanding you correctly, then you'll want some algorithm
> >> like
> >> > this:
>
> >> > 1) retrieve all interface types that inherit from IRepository<T> from an
> >> > assembly
> >> > 2) find concrete types that implement your specific interface type
> >> > (ISomethingRepository)
> >> > 3) register the concrete type as an implementation of ISomething
> >> Repository
> >> > and also as an implemntation of IRepository<Something>
>
> >> > You can do this in Binsor.
>
> >> > If this is the algorithm you want to follow, I can dig up some code from
> >> > where I've done something similar before.
>
> >> > Is that what you're trying to accomplish?
>
> >> > On Thu, Feb 26, 2009 at 6:04 AM, Bergius <[email protected]> wrote:
>
> >> > > Hi. I'm getting tired of wiring up stuff by hand, but I can't quite
> >> > > figure out the Binsor recipe for autoregistration success with this
> >> > > structure:
>
> >> > > ARRepository<T> : IRepository<T>
> >> > > ISomethingRepository : IRepository<Something>
> >> > > ARSomethingRepository : ARRepository<Something>, ISomethingRepository
>
> >> > > I want to achieve this for all my repos, but automatically:
> >> > > component ARSomethingRepository < IRepository of Something,
> >> > > ISomethingRepository
>
> >> > > I've googled around, but all I've managed to find are four-liners to
> >> > > wire up implementations with a single interface.
>
> >> > > Any pointers?
>
> >> > > / Bergius
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Rhino Tools Dev" 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/rhino-tools-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to