/// <summary> /// Initializes a new instance of <see cref="ContractToImplementorsSerializer"/> /// </summary> /// <param name="scheduler"></param> /// <param name="assemblies"></param> /// <param name="logger"></param> public ContractToImplementorsSerializer( IScheduler scheduler, IAssemblies assemblies, ILogger logger) { _logger = logger; var before = DateTime.UtcNow; scheduler.PerformForEach(assemblies.GetAll(), assembly => { try { var types = assembly.GetTypes(); foreach (var type in types) { if (!string.IsNullOrEmpty(type.AssemblyQualifiedName)) { _typesByName[type.AssemblyQualifiedName] = type; } } } catch (ReflectionTypeLoadException ex) { foreach (var loaderException in ex.LoaderExceptions) { _logger.Error($"Failed to load: {loaderException.Source} {loaderException.Message}"); } } }); Console.WriteLine($"Gathering Types : {DateTime.UtcNow.Subtract(before).ToString("G")}"); }
/// <inheritdoc/> public void Feed(IAssemblies assemblies, IContractToImplementorsMap map) { _scheduler.PerformForEach(assemblies.GetAll(), assembly => { try { var types = assembly.GetTypes(); map.Feed(types); } catch (ReflectionTypeLoadException ex) { foreach (var loaderException in ex.LoaderExceptions) { _logger.Error("TypeFeed failure for assembly {assemblyName} : {loaderExceptionSource} {loaderExceptionMessage}", assembly.FullName, loaderException.Source, loaderException.Message); } } }); }
/// <inheritdoc/> public void Feed(IAssemblies assemblies, IContractToImplementorsMap map) { _scheduler.PerformForEach(assemblies.GetAll(), assembly => { try { var types = assembly.GetTypes(); map.Feed(types); } catch (ReflectionTypeLoadException ex) { foreach (var loaderException in ex.LoaderExceptions) { _logger.Error($"Failed to load: {loaderException.Source} {loaderException.Message}"); } } }); }
#pragma warning restore 1591 // Xml Comments void CollectTypes() { var assemblies = _assemblies.GetAll(); Parallel.ForEach(assemblies, assembly => { try { _contractToImplementorsMap.Feed(assembly.GetTypes()); } catch (ReflectionTypeLoadException ex) { foreach (var loaderException in ex.LoaderExceptions) { Debug.WriteLine(string.Format("Failed to load: {0} {1}", loaderException.Source, loaderException.Message)); } } }); }
/// <summary> /// Add Dolittle specifics to the <see cref="ContainerBuilder"/> /// </summary> /// <param name="containerBuilder"><see cref="ContainerBuilder"/> to extend</param> /// <param name="assemblies">Discovered <see cref="IAssemblies"/></param> /// <param name="bindings"><see cref="IBindingCollection">Bindings</see> to hook up</param> public static void AddDolittle(this ContainerBuilder containerBuilder, IAssemblies assemblies, IBindingCollection bindings) { var allAssemblies = assemblies.GetAll().ToArray(); containerBuilder.RegisterAssemblyModules(allAssemblies); var selfBindingRegistrationSource = new SelfBindingRegistrationSource(type => !type.Namespace.StartsWith("Microsoft") && !type.Namespace.StartsWith("System")); selfBindingRegistrationSource.RegistrationConfiguration = HandleLifeCycleFor; containerBuilder.AddBindingsPerTenantRegistrationSource(); containerBuilder.RegisterSource(selfBindingRegistrationSource); containerBuilder.RegisterSource(new FactoryForRegistrationSource()); containerBuilder.RegisterSource(new OpenGenericTypeCallbackRegistrationSource()); DiscoverAndRegisterRegistrationSources(containerBuilder, allAssemblies); RegisterUpBindingsIntoContainerBuilder(bindings, containerBuilder); }
static void DiscoverClassMapsAndAddAssemblies( IAssemblies assemblies, ITypeDiscoverer typeDiscoverer, MappingConfiguration mappings) { var assembliesWithFluentMappings = typeDiscoverer .FindMultiple(typeof(IMappingProvider)) .Select(t => t.Assembly) .Distinct(); foreach (var assembly in assembliesWithFluentMappings) { mappings.FluentMappings.AddFromAssembly(assembly).Conventions.Add(DefaultLazy.Never(), AutoImport.Never()); } var assembliesWithHbmMappings = assemblies .GetAll() .Where(a => a.GetManifestResourceNames().Any(s => s.EndsWith(".hbm.xml"))); foreach (var assembly in assembliesWithHbmMappings) { mappings.HbmMappings.AddFromAssembly(assembly); } }
void CollectTypes() { foreach (var assembly in _assemblies.GetAll()) AddTypes(assembly.DefinedTypes.Select(t => t.AsType()); }