Пример #1
0
        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");
                }
        }