Elegant Code
time to read 1 min | 165 words
I just finished writing this, and I find it very pleasing to look at:
public class EntitiesToRepositories { public static void Register( IWindsorContainer windsorContainer, ISessionFactory sessionFactory, Type repository, params Assembly[] assemblies ) { if(typeof(IRepository<>).IsAssignableFrom(repository)) throw new ArgumentException("Repository must be a type inheriting from IRepository<T>, " +
"and must be an open generic type. Sample: typeof(NHRepository<>)."); foreach (IClassMetadata meta in sessionFactory.GetAllClassMetadata().Values) { Type mappedClass = meta.GetMappedClass(EntityMode.Poco); if (mappedClass == null) continue; foreach (Type interfaceType in mappedClass.GetInterfaces()) { if(IsDefinedInAssemblies(interfaceType, assemblies)==false) continue; windsorContainer.Register( Component.For(typeof(IRepository<>).MakeGenericType(interfaceType)) .ImplementedBy(repository.MakeGenericType(interfaceType)) .CustomDependencies(Property.ForKey("ConcreteType").Eq(mappedClass)) ); } } } private static bool IsDefinedInAssemblies(Type type, Assembly[] assemblies) { return Array.IndexOf(assemblies, type.Assembly) != -1; } }

Comments
Comment preview