/// <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")}");
        }
예제 #2
0
 /// <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);
             }
         }
     });
 }
예제 #3
0
 /// <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}");
             }
         }
     });
 }
예제 #4
0
#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);
        }
예제 #6
0
        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);
            }
        }
예제 #7
0
		void CollectTypes()
		{
            foreach (var assembly in _assemblies.GetAll())
               AddTypes(assembly.DefinedTypes.Select(t => t.AsType());
		}