public async Task AttachPreBuiltTypes(GenerationRules rules, Assembly assembly, IServiceProvider services) { var typeSet = await TypeRepository.ForAssembly(assembly); var handlerTypes = typeSet.ClosedTypes.Concretes.Where(x => x.CanBeCastTo <RouteHandler>()).ToArray(); var container = (IContainer)services; foreach (var chain in _chains) { chain.AttachPreBuiltHandler(rules, container, handlerTypes); } }
/// <summary> /// Programmatically directs Marten to map all the subclasses of <cref name="T" /> to a hierarchy of types. /// <c>Unadvised in projects with many types.</c> /// </summary> /// <returns></returns> public void AddHierarchy() { var baseType = _parent.DocumentType; var assembly = baseType.GetTypeInfo().Assembly; var types = TypeRepository.ForAssembly(assembly).GetAwaiter().GetResult(); var allSubclassTypes = types.ClosedTypes.Concretes .Where(x => x.CanBeCastTo(baseType)); foreach (var subclassType in allSubclassTypes) { Add(subclassType, null); } }
async Task IGeneratesCode.AttachPreBuiltTypes(GenerationRules rules, Assembly assembly, IServiceProvider services) { var typeSet = await TypeRepository.ForAssembly(assembly); var handlerTypes = typeSet.ClosedTypes.Concretes.Where(x => x.CanBeCastTo <MessageHandler>()).ToArray(); var container = (IContainer)services; foreach (var chain in Chains) { var handler = chain.AttachPreBuiltHandler(rules, container, handlerTypes); if (handler != null) { _handlers = _handlers.Update(chain.MessageType, handler); } } }