/// <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);
        }
예제 #2
0
        /// <inheritdoc/>
        public void Perform(BasicsSettings settings, IBootStageBuilder builder)
        {
            var entryAssembly = settings.EntryAssembly ?? Assembly.GetEntryAssembly();
            var environment   = settings.Environment ?? Environment.Production;

            builder.Associate(WellKnownAssociations.EntryAssembly, entryAssembly);
            builder.Associate(WellKnownAssociations.Environment, environment);
            builder.Bindings.Bind <Environment>().To(environment);
        }
        /// <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);
        }
예제 #4
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);
        }
예제 #5
0
        /// <inheritdoc/>
        public void Perform(InitialSystemSettings settings, IBootStageBuilder builder)
        {
            var scheduler = settings.Scheduler ?? new AsyncScheduler();

            builder.Associate(WellKnownAssociations.Scheduler, scheduler);

            builder.Bindings.Bind <ISystemClock>().To(settings.SystemClock ?? new SystemClock());;
            builder.Bindings.Bind <IFileSystem>().To(settings.FileSystem ?? new FileSystem());
            builder.Bindings.Bind <IScheduler>().To(scheduler);
        }
예제 #6
0
        /// <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);
        }
예제 #7
0
        /// <inheritdoc/>
        public void Perform(LoggingSettings settings, IBootStageBuilder builder)
        {
            var loggerManager = settings.DisableLogging ? NullLoggerManager.Instance : LoggerManager.Instance;

            if (settings.LogMessageWriterCreators != null)
            {
                loggerManager.AddLogMessageWriterCreators(settings.LogMessageWriterCreators.ToArray());
            }

            builder.Associate(WellKnownAssociations.LoggerManager, loggerManager);
            builder.Bindings.Bind <ILoggerManager>().To(loggerManager);
            builder.Bindings.Bind(typeof(ILogger <>)).To(context => loggerManager.CreateLogger(context.Service.GetGenericArguments()[0]));
            builder.Bindings.Bind <ILogger>().To(() => loggerManager.CreateLogger <UnknownLogMessageSource>());

            var logger = loggerManager.CreateLogger <Logging>();

            logger.Debug("<********* BOOTSTAGE : Logging *********>");

            var executionContextLogger = loggerManager.CreateLogger <ExecutionContextManager>();

            ExecutionContextManager.SetInitialExecutionContext(executionContextLogger);

            builder.Bindings.Bind <IExecutionContextManager>().To(new ExecutionContextManager(executionContextLogger));
        }