/// <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); }
/// <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); }
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()); }