コード例 #1
0
        /// <summary>
        /// Bootstrapping entry
        /// </summary>
        /// <param name="backgroundBootstrapConfiguration"></param>
        /// <param name="scanAssemblies"></param>
        /// <returns></returns>
        public static IServiceContainer BootstrapHelper(this IBackgroundApplicationBootstrapConfiguration backgroundBootstrapConfiguration, params Assembly[] scanAssemblies)
        {
            if (scanAssemblies == null)
            {
                StackTrace stackTrace = new StackTrace();
                // TODO: workaround for tests
                var assembly = stackTrace.GetFrame(1).GetMethod().DeclaringType.Assembly;

                scanAssemblies = new Assembly[] { assembly };
            }

            ConfigurationBootstrapper configurationBootstrapper = new ConfigurationBootstrapper();

            configurationBootstrapper.RecurringTaskLogProvider = () => backgroundBootstrapConfiguration.RecurringTaskLogProvider;

            var result = backgroundBootstrapConfiguration.Resolve(configurationBootstrapper, scanAssemblies);

            // Proc config validation
            BackgroundApplicationConfiguration config = null;

            try
            {
                config = BackgroundApplicationConfiguration.Instance;
            }
            catch { }
            finally
            {
                if (config.IsNull())
                {
                    throw new Exception("Signals.Core.Background.Configuration.BackgroundApplicationConfiguration is not provided. Please use a configuration provider to provide configuration values!");
                }
            }

            RegisterBackground();
            ScheduleRecurring();
            NotifyOnStartup();

            return(result);
        }
コード例 #2
0
        /// <summary>
        /// Called when process is starting
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public Task StartAsync(CancellationToken cancellationToken)
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;

            string environment = null;

            FileConfigurationProvider ProviderForFile(string name) => new FileConfigurationProvider
            {
                File           = name,
                Path           = environment.IsNullOrEmpty() ? Path.Combine(AppContext.BaseDirectory, $"configs") : Path.Combine(AppContext.BaseDirectory, $"configs", environment),
                ReloadOnAccess = false
            };

            // set active configuration
            EnvironmentConfiguration.UseProvider(ProviderForFile("environment.config.json"));
            environment = EnvironmentConfiguration.Instance.Environment;

            // load custom configurations from file

            // Signals core application configuration
            ApplicationConfiguration.UseProvider(ProviderForFile("application.config.json"));
            // Signals core background application configuration
            BackgroundApplicationConfiguration.UseProvider(ProviderForFile("background.application.config.json"));
            // Application custom domain configuration
            DomainConfiguration.UseProvider(ProviderForFile("domain.config.json"));

            // use general exception handling strategy
            var strategyBuilder = new StrategyBuilder();

            strategyBuilder.Add <Exception>(new RetryStrategy {
                RetryCount = 3, RetryCooldown = TimeSpan.FromMinutes(5)
            }).SetAutoHandling(false);

            // configure Signals aspects
            var config = new BackgroundApplicationBootstrapConfiguration
            {
                // configure dependency injection
                RegistrationService = new RegistrationService(),
                // recurring task registry
                TaskRegistry = new FluentRegistry(),
                // configure caching
                CacheConfiguration = new InMemoryCacheConfiguration
                {
                    DataProvider     = new InMemoryDataProvider(),
                    ExpirationPolicy = CacheExpirationPolicy.Sliding,
                    ExpirationTime   = TimeSpan.FromMinutes(1)
                },
                // configure logging in database
                LoggerConfiguration = new DatabaseLoggingConfiguration
                {
                    Database     = DomainConfiguration.Instance.DatabaseConfiguration.ActiveConfiguration.Database,
                    Host         = DomainConfiguration.Instance.DatabaseConfiguration.ActiveConfiguration.IpAddress,
                    Username     = DomainConfiguration.Instance.DatabaseConfiguration.ActiveConfiguration.Uid,
                    Password     = DomainConfiguration.Instance.DatabaseConfiguration.ActiveConfiguration.Pwd,
                    DataProvider = DataProvider.SqlClient,
                    TableName    = "LogEntity"
                },
                // configure localization from json files
                LocalizationConfiguration = new JsonDataProviderConfiguration
                {
                    DirectoryPath       = Path.Combine(AppContext.BaseDirectory, "system.resources"),
                    FileExtension       = "app",
                    LocalizationSources = new List <LocalizationSource>
                    {
                        new LocalizationSource
                        {
                            Name       = "Mail messages",
                            SourcePath = "mailmessages"
                        },
                        new LocalizationSource
                        {
                            Name       = "Validation rules",
                            SourcePath = "validationrules"
                        },
                        new LocalizationSource
                        {
                            Name       = "Pages",
                            SourcePath = "pages"
                        },
                        new LocalizationSource
                        {
                            Name       = "Processes",
                            SourcePath = "processes"
                        }
                    }
                },
                // configure pubsub with MSSQL broker
                ChannelConfiguration = new MsSqlChannelConfiguration
                {
                    // make sure broker is enabled in the database
                    // ex: ALTER DATABASE [acme.db] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE
                    ConnectionString         = DomainConfiguration.Instance.DatabaseConfiguration.ActiveConfiguration.ConnectionString,
                    DbTableName              = DomainConfiguration.Instance.NotificationConfiguration.DbTableName,
                    MessageListeningStrategy = MessageListeningStrategy.Broker
                },
                StrategyBuilder = new StrategyBuilder().SetAutoHandling(false),
            };

            // set default serialization settings
            config.JsonSerializerSettings = new Newtonsoft.Json.JsonSerializerSettings();
            config.JsonSerializerSettings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);

            // bootstrap the configuration from the references assemblies
            var assemblies = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "App.*.dll").Select(file => Assembly.LoadFrom(file)).ToArray();

            config.Bootstrap(assemblies);

            // set current culture and UI culture
            Thread.CurrentThread.CurrentCulture   = new CultureInfo(DomainConfiguration.Instance.LocalizationConfiguration.DefaultCulture);
            Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

            return(Task.CompletedTask);
        }