private static void Main(string[] args) { var configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddEnvironmentVariables("ESHOP_"); Configuration = configurationBuilder.Build(); Console.Title = "Elastic"; var config = new LoggerConfiguration() .MinimumLevel.Debug() .Enrich.FromLogContext().Enrich.WithThreadId().Enrich.WithProcessName().Enrich.WithProperty("Endpoint", "Elastic") .WriteTo.Console(outputTemplate: "[{Level}] {Message}{NewLine}{Exception}", restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Warning); if (!string.IsNullOrEmpty(Configuration["SeqConnection"])) { config.WriteTo.Seq(Configuration["SeqConnection"]); } Log.Logger = config.CreateLogger(); AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper; NServiceBus.Logging.LogManager.Use <SerilogFactory>(); var client = GetElastic(); // Scan working directory for assemblies containing messages var assemblies = new Assembly[] { Assembly.GetExecutingAssembly() }.Concat( DIExtensions.GetAssembliesInDirectory(selector: (file) => file.Name.StartsWith("Aggregates") || file.Name.StartsWith("eShop"))).ToList(); _container = new Container(x => { x.For <IValidatorFactory>().Use <StructureMapValidatorFactory>(); x.For <IMessageSession>().Use(() => Aggregates.Bus.Instance); x.For <IElasticClient>().Use(client); x.For <Infrastructure.IUnitOfWork>().Use <UnitOfWork>(); x.For <Aggregates.UnitOfWork.IApplication>().Add(b => (Aggregates.UnitOfWork.IApplication)b.GetInstance <Infrastructure.IUnitOfWork>()); x.Scan(y => { // Note do not use structuremap's assembly scanning it will load EVERY package in nuget foreach (var a in assemblies) { y.Assembly(a); } y.WithDefaultConventions(); y.AddAllTypesOf <ISetup>(); }); }); // Setup any app stuff that might exist AppSetup.InitiateSetup(_container.GetAllInstances <ISetup>()); AppSetup.SetupApplication().Wait(); // Start the bus _bus = InitBus().Result; Console.WriteLine("Press CTRL+C to exit..."); Console.CancelKeyPress += (sender, eArgs) => { QuitEvent.Set(); eArgs.Cancel = true; }; QuitEvent.WaitOne(); _bus.Stop().Wait(); }