Beispiel #1
0
        /// <summary>
        /// Export by interfaces
        /// </summary>
        /// <param name="filter"></param>
        /// <returns></returns>
        public IFluentExportStrategyConfiguration ByInterfaces(Func <Type, bool> filter = null)
        {
            if (filter == null)
            {
                filter = t => !InjectionScopeConfiguration.DefaultInterfaceFilter(t, _exportConfiguration.ActivationType);
            }

            foreach (var interfaceTypes in _exportConfiguration.ActivationType.GetTypeInfo().ImplementedInterfaces)
            {
                if (!filter(interfaceTypes))
                {
                    continue;
                }

                if (_exportConfiguration.ActivationType.GetTypeInfo().IsGenericTypeDefinition)
                {
                    _exportConfiguration.AddExportAs(interfaceTypes.GetGenericTypeDefinition());
                }
                else
                {
                    _exportConfiguration.AddExportAs(interfaceTypes);
                }
            }

            return(this);
        }
Beispiel #2
0
        /// <summary>
        /// Creates a new configuration object
        /// </summary>
        /// <param name="configuration"></param>
        /// <returns></returns>
        protected static IInjectionScopeConfiguration CreateConfiguration(Action <InjectionScopeConfiguration> configuration)
        {
            var configurationObject = new InjectionScopeConfiguration();

            configuration?.Invoke(configurationObject);

            return(configurationObject);
        }
Beispiel #3
0
        public static Task Main(string[] args)
        {
            var hostBuilder = new HostBuilder();
            var graceConfig = new InjectionScopeConfiguration
            {
                Behaviors =
                {
                    AllowInstanceAndFactoryToReturnNull = true
                }
            };

            IAppInfo appInfo = null;

            hostBuilder
            //.UseGrace(graceConfig)
            .ConfigureHostConfiguration(cfg =>
            {
                cfg.SetBasePath(Directory.GetCurrentDirectory())
                .AddEnvironmentVariables("ASPNETCORE_")                                 // todo: change from ASPNETCORE_?
                .AddCommandLine(args);
            })
            .UseServiceProviderFactory(new GraceServiceProviderFactory(graceConfig))
            .ConfigureServices((ctx, services) =>
            {
                appInfo       = new AppInfo(ctx.Configuration);                   // rebuild it so we ensure we have latest all configs
                Console.Title = $"{appInfo.Name} - {appInfo.Environment}";

                services.AddSingleton(appInfo);
                services.AddSingleton <IAppTenantRegistry, AppTenantRegistry>();
                services.Configure <ApiHostedServiceOptions>(options =>
                {
                    options.Port = GetAvailablePort(6600, 6699);
                    //options.PathString = "/health";
                });

                services.Configure <ConsoleLifetimeOptions>(options =>
                {
                    options.SuppressStatusMessages = true;
                });
            })
            .ConfigureAppConfiguration((ctx, cfg) =>
            {
                var shortEnvName = AppInfo.MapEnvironmentName(ctx.HostingEnvironment.EnvironmentName);
                cfg.AddJsonFile("appsettings.json")
                .AddJsonFile($"appsettings.{shortEnvName}.json", optional: true)
                .AddJsonFile("app-info.json")
                .AddEnvironmentVariables()
                .AddCommandLine(args);

                appInfo = new AppInfo(cfg.Build());

                if (!appInfo.IsDockerized)
                {
                    return;
                }

                cfg.Sources.Clear();

                cfg.AddJsonFile("appsettings.json")
                .AddJsonFile($"appsettings.{shortEnvName}.json", optional: true)
                .AddJsonFile("appsettings.dev-docker.json", optional: true)
                .AddJsonFile("app-info.json")
                .AddEnvironmentVariables()
                .AddCommandLine(args);
            })
            .UseSerilog((ctx, loggerConfig) =>
            {
                loggerConfig.Enrich.FromLogContext()
                .ReadFrom.Configuration(ctx.Configuration)
                .Enrich.WithMachineName()
                .Enrich.WithDemystifiedStackTraces()
                .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] [{SourceContext:l}] {Message:lj}{NewLine}{Exception}");

                loggerConfig.WithAppInfo(appInfo);
            })
            .UseOrleans((ctx, builder) =>
            {
                builder
                .UseAppConfiguration(new AppSiloBuilderContext
                {
                    AppInfo            = appInfo,
                    HostBuilderContext = ctx,
                    SiloOptions        = new AppSiloOptions
                    {
                        SiloPort    = GetAvailablePort(11111, 12000),
                        GatewayPort = 30001
                    }
                })
                .ConfigureApplicationParts(parts => parts
                                           .AddApplicationPart(typeof(HeroGrain).Assembly).WithReferences()
                                           )
                .AddIncomingGrainCallFilter <LoggingIncomingCallFilter>()
                //.AddOutgoingGrainCallFilter<LoggingOutgoingCallFilter>()
                .AddStartupTask <WarmupStartupTask>()
                .UseSignalR()
                ;
            })
            .ConfigureServices((ctx, services) =>
            {
                services.AddHostedService <ApiHostedService>();
            })
            ;

            return(hostBuilder.RunConsoleAsync());
        }