public void Register(ContainerBuilder builder, ITypeFinder typeFinder) { var types = typeFinder.GetAssembly().ToArray(); builder.RegisterControllers(types); builder.Register <IDbContext>(c => new CassanticContext()).AsSelf(); builder.RegisterGeneric(typeof(CassanticRepository <>)).As(typeof(IRepository <>)); #region Aspect builder.RegisterType <LogService>().Named <IInterceptor>("log-calls"); #endregion #region Redis and Cassandra Register Cluster cluster = Cluster.Builder().AddContactPoint("127.0.0.1").Build(); MappingConfiguration.Global.Define <CassanticMapper>(); builder.Register(c => cluster.Connect("cassantic")).As <ISession>(); builder.Register(x => new CassandraCacheManager(x.Resolve <ISession>())).As <ICacheManager>().InstancePerDependency(); builder.Register <IRedisClientsManager>(c => new PooledRedisClientManager("127.0.0.1:32768")).AsSelf(); #endregion builder.RegisterType <RedisCacheManager>().As <ICacheManager>().Named <ICacheManager>("redis.cached").AsSelf(); builder.RegisterType <CassandraCacheManager>().As <ICacheManager>().Named <ICacheManager>("cassandra.cached").AsSelf(); builder.RegisterType <AccountService>().As <IAccountService>().EnableInterfaceInterceptors(); var consumers = typeFinder.FindClassesOfType(typeof(IConsumer <>)).ToList(); foreach (var item in consumers) { builder.RegisterType(item).As(item.FindInterfaces((type, criteria) => { var isMatch = type.IsGenericType && ((Type)criteria).IsAssignableFrom(type.GetGenericTypeDefinition()); return(isMatch); }, typeof(IConsumer <>))); } }