/// <inheritdoc/>
        public void Perform(DiscoverySettings settings, IBootStageBuilder builder)
        {
            var entryAssembly = builder.GetAssociation(WellKnownAssociations.EntryAssembly) as Assembly;
            var loggerManager = builder.GetAssociation(WellKnownAssociations.LoggerManager) as ILoggerManager;
            var logger        = loggerManager.CreateLogger <Discovery>();
            var scheduler     = builder.GetAssociation(WellKnownAssociations.Scheduler) as IScheduler;

            logger.Debug("  Discovery");
            var assemblies = Assemblies.Bootstrap.Boot.Start(logger, entryAssembly, settings.AssemblyProvider, _ =>
            {
                if (settings.IncludeAssembliesStartWith?.Count() > 0)
                {
                    settings.IncludeAssembliesStartWith.ForEach(name => logger.Trace("Including assemblies starting with '{name}'", name));
                    _.ExceptAssembliesStartingWith(settings.IncludeAssembliesStartWith.ToArray());
                }
            });

            logger.Debug("  Set up type system for discovery");
            var typeFinder = Types.Bootstrap.Boot.Start(assemblies, scheduler, logger, entryAssembly);

            logger.Debug("  Type system ready");

            builder.Bindings.Bind <IAssemblies>().To(assemblies);
            builder.Bindings.Bind <ITypeFinder>().To(typeFinder);

            builder.Associate(WellKnownAssociations.Assemblies, assemblies);
            builder.Associate(WellKnownAssociations.TypeFinder, typeFinder);
        }
Exemple #2
0
        /// <inheritdoc/>
        public void Perform(LoggingSettings settings, IBootStageBuilder builder)
        {
            var entryAssembly = builder.GetAssociation(WellKnownAssociations.EntryAssembly) as Assembly;
            var environment   = builder.GetAssociation(WellKnownAssociations.Environment) as Environment;

            _initialExecutionContext = ExecutionContextManager.SetInitialExecutionContext();

#pragma warning disable CA2000
            var loggerFactory = settings.LoggerFactory ?? new LoggerFactory();
#pragma warning restore CA2000

            _isProduction = environment == Environment.Production;

            var logAppender = settings.LogAppender;

            if (logAppender == null)
            {
                logAppender = (_isProduction && !settings.UseDefaultInAllEnvironments) ?
                              new JsonLogAppender(GetCurrentLoggingContext) :
                              new DefaultLogAppender(GetCurrentLoggingContext, loggerFactory) as ILogAppender;
            }

            var logAppenders = Dolittle.Logging.Bootstrap.Boot.Start(logAppender, entryAssembly);
            Dolittle.Logging.ILogger logger = settings.Logger ?? new Logger(logAppenders);
            logger.Information($"<********* BOOTSTAGE : Logging *********>");

            builder.Associate(WellKnownAssociations.Logger, logger);

            _executionContextManager = new ExecutionContextManager(logger);

            builder.Bindings.Bind <Dolittle.Logging.ILogger>().To(logger);
            builder.Bindings.Bind <ILoggerFactory>().To(loggerFactory);
            builder.Bindings.Bind <IExecutionContextManager>().To(_executionContextManager);
        }
        /// <inheritdoc/>
        public void Perform(ContainerSettings settings, IBootStageBuilder builder)
        {
            IBindingCollection resultingBindings;
            var loggerManager = builder.GetAssociation(WellKnownAssociations.LoggerManager) as ILoggerManager;
            var logger        = loggerManager.CreateLogger <Container>();
            var typeFinder    = builder.GetAssociation(WellKnownAssociations.TypeFinder) as ITypeFinder;
            var scheduler     = builder.GetAssociation(WellKnownAssociations.Scheduler) as IScheduler;

            var bindings   = builder.GetAssociation(WellKnownAssociations.Bindings) as IBindingCollection;
            var assemblies = builder.GetAssociation(WellKnownAssociations.Assemblies) as IAssemblies;

            var fileSystem = new FileSystem();

            if (settings.ContainerType != null)
            {
                logger.Trace("Starting DependencyInversion with predefined container type '{containerType}'", settings.ContainerType.AssemblyQualifiedName);
                resultingBindings = Boot.Start(assemblies, typeFinder, scheduler, fileSystem, loggerManager, settings.ContainerType, bindings, builder.Container as BootContainer);
            }
            else
            {
                var bootResult = Boot.Start(assemblies, typeFinder, scheduler, fileSystem, loggerManager, bindings, builder.Container as BootContainer);
                resultingBindings = bootResult.Bindings;
                builder.UseContainer(bootResult.Container);
                logger.Trace("Using container of type '{containerType}'", builder.Container.GetType().AssemblyQualifiedName);
            }

            builder.Associate(WellKnownAssociations.Bindings, resultingBindings);
        }
Exemple #4
0
        /// <inheritdoc/>
        public void Perform(NoSettings settings, IBootStageBuilder builder)
        {
            var bindings            = builder.GetAssociation(WellKnownAssociations.Bindings) as IBindingCollection;
            var newBindingsNotifier = builder.GetAssociation(WellKnownAssociations.NewBindingsNotificationHub) as ICanNotifyForNewBindings;
            var bootContainer       = new BootContainer(bindings, newBindingsNotifier);

            builder.UseContainer(bootContainer);
        }
Exemple #5
0
 /// <inheritdoc/>
 public void Perform(BootProceduresSettings settings, IBootStageBuilder builder)
 {
     if( settings.Enabled )
     {
         var logger = builder.GetAssociation(WellKnownAssociations.Logger) as ILogger;
         var typeFinder = builder.GetAssociation(WellKnownAssociations.TypeFinder) as ITypeFinder;
         builder.Container.Get<IBootProcedures>().Perform();
     }
 }
Exemple #6
0
        /// <inheritdoc/>
        public void Perform(NoSettings settings, IBootStageBuilder builder)
        {
            var typeFinder = builder.GetAssociation(WellKnownAssociations.TypeFinder) as ITypeFinder;
            var parsers    = new ConfigurationFileParsers(typeFinder, builder.Container);

            builder.Bindings.Bind <IConfigurationFileParsers>().To(parsers);
        }
        /// <inheritdoc/>
        public void Perform(DiscoverySettings settings, IBootStageBuilder builder)
        {
            var entryAssembly = builder.GetAssociation(WellKnownAssociations.EntryAssembly) as Assembly;
            var logger        = builder.GetAssociation(WellKnownAssociations.Logger) as ILogger;
            var scheduler     = builder.GetAssociation(WellKnownAssociations.Scheduler) as IScheduler;

            logger.Information("  Discover all assemblies");
            var assemblies = Dolittle.Assemblies.Bootstrap.Boot.Start(logger, entryAssembly, settings.AssemblyProvider);

            logger.Information("  Set up type system for discovery");
            var typeFinder = Dolittle.Types.Bootstrap.Boot.Start(assemblies, scheduler, logger, entryAssembly);

            logger.Information("  Type system ready");

            builder.Bindings.Bind <IAssemblies>().To(assemblies);
            builder.Bindings.Bind <ITypeFinder>().To(typeFinder);

            builder.Associate(WellKnownAssociations.Assemblies, assemblies);
            builder.Associate(WellKnownAssociations.TypeFinder, typeFinder);
        }
Exemple #8
0
         /// <inheritdoc/>
        public void Perform(NoSettings settings, IBootStageBuilder builder)
        {
            var typeFinder = builder.GetAssociation(WellKnownAssociations.TypeFinder) as ITypeFinder;
            var logger = builder.GetAssociation(WellKnownAssociations.Logger) as ILogger;
            
            var configurationObjectProviders = new ConfigurationObjectProviders(typeFinder, builder.Container, logger);
            builder.Bindings.Bind<IConfigurationObjectProviders>().To(configurationObjectProviders);

            var configurationObjectTypes = typeFinder.FindMultiple<IConfigurationObject>();
            configurationObjectTypes.ForEach((System.Action<System.Type>)(_ => 
            {
                logger.Trace((string)$"Bind configuration object '{_.GetFriendlyConfigurationName()} - {_.AssemblyQualifiedName}'");
                _.ShouldBeImmutable();
                builder.Bindings.Bind(_).To((System.Func<object>)(() => {
                    var instance = configurationObjectProviders.Provide(_);
                    logger.Trace((string)$"Providing configuration object '{_.GetFriendlyConfigurationName()} - {_.AssemblyQualifiedName}' - {instance.GetHashCode()}");
                    return instance;
                }));
            }));
        }
Exemple #9
0
        /// <inheritdoc/>
        public void Perform(NoSettings settings, IBootStageBuilder builder)
        {
            var typeFinder    = builder.GetAssociation(WellKnownAssociations.TypeFinder) as ITypeFinder;
            var loggerManager = builder.GetAssociation(WellKnownAssociations.LoggerManager) as ILoggerManager;
            var logger        = loggerManager.CreateLogger <Configuration>();

            var configurationObjectProviders = new ConfigurationObjectProviders(typeFinder, builder.Container, logger);

            builder.Bindings.Bind <IConfigurationObjectProviders>().To(configurationObjectProviders);

            var configurationObjectTypes = typeFinder.FindMultiple <IConfigurationObject>();

            configurationObjectTypes.ForEach(_ =>
            {
                logger.Trace("Bind configuration object '{configurationObjectName} - {configurationObjectType}'", _.GetFriendlyConfigurationName(), _.AssemblyQualifiedName);
                _.ShouldBeImmutable();
                builder.Bindings.Bind(_).To(() =>
                {
                    var instance = configurationObjectProviders.Provide(_);
                    logger.Trace("Providing configuration object '{configurationObjectName} - {configurationTypeName}' - {configurationObjectHash}", _.GetFriendlyConfigurationName(), _.AssemblyQualifiedName, instance.GetHashCode());
                    return(instance);
                });
            });
        }
        /// <inheritdoc/>
        public void Perform(NoSettings settings, IBootStageBuilder builder)
        {
            if (IoTEdgeHelpers.IsRunningInIotEdge())
            {
                var          logger = builder.GetAssociation(WellKnownAssociations.Logger) as ILogger;
                ModuleClient client = null;

                ModuleClient.CreateFromEnvironmentAsync(TransportType.Mqtt)
                .ContinueWith(_ => client = _.Result)
                .Wait();

                logger.Information("Open IoT Edge ModuleClient and wait");
                client.OpenAsync().Wait();
                logger.Information("Client is ready");

                builder.Bindings.Bind <ModuleClient>().To(client);
            }
        }
        /// <inheritdoc/>
        public void Perform(DiscoverySettings settings, IBootStageBuilder builder)
        {
            var typeFinder = builder.GetAssociation(WellKnownAssociations.TypeFinder) as ITypeFinder;

            _callback(typeFinder);
        }
Exemple #12
0
        /// <inheritdoc/>
        public void Perform(ContainerSettings settings, IBootStageBuilder builder)
        {
            var bindings = builder.GetAssociation(WellKnownAssociations.Bindings) as IBindingCollection;

            AllBindings = new BindingCollection(bindings.ToArray());
        }