private void RegisterHandlers(HandlerConfig config) { // Register traditional Brighter event type with appropriate handler and mapper. config.Register <TaskReminderSentEvent, TaskReminderSentEventHandler, TaskReminderSentEventMapper>(); // Register events deriving from GenericTask that optonally confirm to our generic usage // hoisting custom version for derived types where found. RegisterGenericHandlersFor <GenericTask>(config); _container.Register(typeof(LoggingContextHandler <>)).AsMultiInstance(); }
private void RegisterGenericHandlersFor <TRequestBase>(HandlerConfig config) { var baseType = typeof(TRequestBase); foreach (var derivedType in EventTypes.Where(t => t.FullName != baseType.FullName && baseType.IsAssignableFrom(t))) { var handlerImplType = HandlerTypes.FirstOrDefault(t => typeof(IHandleRequests <>).MakeGenericType(derivedType).IsAssignableFrom(t)); if (handlerImplType == null) { var handlerBaseImplType = HandlerTypes.FirstOrDefault(t => t.Name.Equals(baseType.Name + "GenericHandler`1")); if (handlerBaseImplType != null) { handlerImplType = handlerBaseImplType.MakeGenericType(derivedType); } } var mapperImplType = MapperTypes.FirstOrDefault(t => typeof(IAmAMessageMapper <>).MakeGenericType(derivedType).IsAssignableFrom(t)); if (mapperImplType == null) { var mapperBaseImplType = MapperTypes.FirstOrDefault(t => t.Name.Equals(baseType.Name + "GenericMapper`1")); if (mapperBaseImplType != null) { mapperImplType = mapperBaseImplType.MakeGenericType(derivedType); } } config.Register( type: derivedType, handler: handlerImplType ?? typeof(GenericHandler <>).MakeGenericType(derivedType), mapper: mapperImplType ?? typeof(GenericMapper <>).MakeGenericType(derivedType)); } }