public static Container ConfigureContainer(IConfiguration configuration, ILogger logger) { ConventionPacks.Register(); var container = new Container(); container.RegisterInstance(configuration); container.RegisterInstance(logger); var mongoUrl = configuration["mongo:url"]; var url = new MongoUrl(mongoUrl); var client = new MongoClient(url); var database = client.GetDatabase(url.DatabaseName); container.RegisterInstance(database); container.RegisterSingleton <IEventObservable, EventObservable>(); container.Register(typeof(IEventHandler <>), typeof(Bootstrapper).Assembly); container.RegisterDecorator(typeof(IEventHandler <>), typeof(LoggerEventHandlerDecorator <>)); container.Collection.Append( typeof(IHostedService), Lifestyle.Singleton.CreateRegistration(() => new EventHandlersConsumer("payments", database, new Dictionary <string, Func <DomainEvent, Task> > { { nameof(OrderPlaced), @event => container.GetInstance <IEventHandler <OrderPlaced> >().Handle((OrderPlaced)@event) } }, logger), container)); return(container); }
public static Container ConfigureContainer(IConfiguration configuration, ILogger logger) { ConventionPacks.Register(); typeof(CollectionElementNameValidator) .GetField("__instance", BindingFlags.Static | BindingFlags.NonPublic) .SetValue(null, new CollectionElementNameValidator36()); var container = new Container(); container.RegisterInstance(configuration); container.RegisterInstance(logger); container.Register <IResumeTokens, ResumeTokens>(); var mongoUrl = configuration["mongo:url"]; var url = new MongoUrl(mongoUrl); var client = new MongoClient(url); var database = client.GetDatabase(url.DatabaseName); container.RegisterInstance(database); container.Collection.Append( typeof(IHostedService), Lifestyle.Singleton.CreateRegistration(() => container.CreateEventEmitter(mongoUrl), container)); container.Collection.Register <IStartupOperation>(typeof(Bootstrapper).Assembly); return(container); }
public static IFixture CreateFixture() { ConventionPacks.Register(); ClassMaps.Register(); var configuration = Configuration.GetConfiguration(); var container = Bootstrapper.ConfigureContainer(configuration, LoggerFactory.Create(configuration)); var fixture = new Fixture(); fixture.Customize <ContainerSpecimenBuilder>(composer => new ContainerSpecimenBuilder(container)); fixture.Register(ObjectId.GenerateNewId); return(fixture); }
public static void Main(string[] args) { ConventionPacks.Register(); ClassMaps.Register(); var configuration = Configuration.GetConfiguration(args); using (var logger = LoggerFactory.Create(configuration)) using (var container = Bootstrapper.ConfigureContainer(configuration, logger)) { BuildWebHost(container, logger, configuration, args).Build().Run(); } }
public static IFixture CreateFixture() { ConventionPacks.Register(); ClassMaps.Register(); var configuration = Configuration.GetConfiguration(); var container = new Container(); var mongoUrl = configuration["mongo:url"]; var url = new MongoUrl(mongoUrl); var client = new MongoClient(url); var database = client.GetDatabase(url.DatabaseName); container.RegisterInstance(database); var fixture = new Fixture(); fixture.Customize <ContainerSpecimenBuilder>(composer => new ContainerSpecimenBuilder(container)); fixture.Register(ObjectId.GenerateNewId); return(fixture); }
private static async Task Main(string[] args) { ConventionPacks.Register(); ClassMaps.Register(); var configuration = Configuration.GetConfiguration(args); using (var logger = LoggerFactory.Create(configuration)) using (var container = Bootstrapper.ConfigureContainer(configuration, logger)) { try { logger.Information("Starting"); var host = new HostBuilder() .ConfigureHostConfiguration(builder => builder.Configure()) .ConfigureServices((context, services) => services.AddSingleton(_ => container.GetAllInstances <IHostedService>())) .Build(); container.Register(() => host.Services.GetRequiredService <IApplicationLifetime>()); container.Verify(); using (host) { await host.StartAsync(); logger.Information("Started"); await host.WaitForShutdownAsync(); } } catch (Exception e) { logger.Fatal(e, "Event publisher crashed."); } logger.Information("Stopped"); } }