コード例 #1
0
        protected void Application_Start(object sender, EventArgs e)
        {
            // Register the default hubs route: ~/signalr/hubs
            RouteTable.Routes.MapOwinPath("/signalr");

            GlobalConfiguration.Configure(WebApiConfig.Register);

            // Add this code, if not present.
            AreaRegistration.RegisterAllAreas();

            var registrar = new BusRegistrar(NinjectDependencyResolver.Current);

            registrar.Register(typeof(EventToHubProxy));

            try
            {
                ILogger logger = NinjectDependencyResolver.Current.Resolve <ILogger>();

                if (logger != null)
                {
                    NinjectDependencyResolver.Current.Resolve <ICorrelationIdHelper>().SetCorrelationId(Guid.Empty);
                    logger.LogInfo("Application started.");
                }
            }
            catch { }
        }
コード例 #2
0
        /// <summary>
        /// Register the all Cqrs command handlers
        /// </summary>
        protected virtual void RegisterCqrsCommandHandlers(BusRegistrar registrar)
        {
            // This will load all the handlers from the domain assembly by reading all command handlers AND event handlers in the same assembly as the provided type
            registrar.Register(typeof(Authentication.Commands.Handlers.CreateUserCommandHandler));

            OnCqrsCommandHandlersRegistered();
        }
コード例 #3
0
        /// <summary>
        /// Register the all Cqrs command handlers
        /// </summary>
        public virtual void RegisterCqrsCommandHandlers()
        {
            var dependencyResolver = Resolve <IDependencyResolver>();
            var registrar          = new BusRegistrar(dependencyResolver);

            RegisterCqrsCommandHandlers(registrar);
        }
コード例 #4
0
        private void RegisterHandlers(IServiceLocator serviceLocator)
        {
            var registrar = new BusRegistrar(serviceLocator);

            //By calling the line below, CQRSlite will register *all* Command Handlers in our project.  We don't need to explicitly register any additional ones. - MPJ 8/2/2016
            registrar.Register(typeof(EmployeeCommandHandler));
        }
コード例 #5
0
        protected override BusRegistrar RegisterCommandAndEventHandlers()
        {
            BusRegistrar registrar = base.RegisterCommandAndEventHandlers();

            registrar.Register(typeof(Order));
            return(registrar);
        }
コード例 #6
0
        protected void Application_Start(object sender, EventArgs e)
        {
            // https://alexandrebrisebois.wordpress.com/2013/03/24/why-are-webrequests-throttled-i-want-more-throughput/
            ServicePointManager.UseNagleAlgorithm      = false;
            ServicePointManager.DefaultConnectionLimit = 1000;
            // http://stackoverflow.com/questions/12915585/azure-queue-performance
            ServicePointManager.Expect100Continue = false;

            // Register the default hubs route: ~/signalr/hubs
            RouteTable.Routes.MapOwinPath("/signalr");

            GlobalConfiguration.Configure(WebApiConfig.Register);

            // Add this code, if not present.
            AreaRegistration.RegisterAllAreas();

            var registrar = new BusRegistrar(NinjectDependencyResolver.Current);

            registrar.Register(typeof(EventToHubProxy));

            try
            {
                ILogger logger = NinjectDependencyResolver.Current.Resolve <ILogger>();

                if (logger != null)
                {
                    NinjectDependencyResolver.Current.Resolve <ICorrelationIdHelper>().SetCorrelationId(Guid.Empty);
                    logger.LogInfo("Application started.");
                }
            }
            catch { }
        }
コード例 #7
0
ファイル: Bootstrapper.cs プロジェクト: petarkorudzhiev/d3es
 private static void RegisterHandlers(IServiceLocator serviceLocator)
 {
     var registrar = new BusRegistrar(serviceLocator);
     registrar.Register(typeof(CartHandlers));
     registrar.Register(typeof(CartViewProjections));
     registrar.Register(typeof(CustomerCreatedEventHandler));
 }
コード例 #8
0
        /// <summary>
        /// Start the <see cref="BusRegistrar"/> by calling <see cref="BusRegistrar.Register(System.Type[])"/> passing <see cref="HandlerTypes"/>
        /// </summary>
        protected virtual BusRegistrar RegisterCommandAndEventHandlers()
        {
            var registrar = new BusRegistrar(DependencyResolver.Current);

            registrar.Register(HandlerTypes);

            return(registrar);
        }
コード例 #9
0
 public void Setup()
 {
     _locator  = new TestDependencyResolver();
     _register = new BusRegistrar(_locator);
     if (TestHandleRegistrar.HandlerList.Count == 0)
     {
         _register.Register(GetType());
     }
 }
コード例 #10
0
 public When_registering_handlers()
 {
     _provider = new TestServiceProvider();
     _register = new BusRegistrar(_provider, new TestHandleRegistrar());
     if (TestHandleRegistrar.HandlerList.Count == 0)
     {
         _register.Register(GetType());
     }
 }
コード例 #11
0
 public When_registering_handlers()
 {
     _locator  = new TestServiceLocator();
     _register = new BusRegistrar(_locator);
     if (TestHandleRegistrar.HandlerList.Count == 0)
     {
         _register.Register(GetType());
     }
 }
コード例 #12
0
 public void Setup()
 {
     _locator  = new TestServiceLocator();
     _register = new BusRegistrar(_locator);
     if (TestHandleRegistrar.HandlerList.Count == 0)
     {
         _register.Register(GetType());
     }
 }
コード例 #13
0
        public bool Start(HostControl hostControl)
        {
            Log.Logger = new LoggerConfiguration()
                         .ReadFrom.AppSettings()
                         .CreateLogger();

            Log.Information($"Service {Name} v.{Version} starting...");

            Log.Information($"Name: {Name}");
            Log.Information($"Title: {Title}");
            Log.Information($"Description: {Description}");
            Log.Information($"Version: {Version}");

            var builder = new ContainerBuilder();

            builder.Register(c => new GridFsStorage(Environment.ExpandEnvironmentVariables(ConfigurationManager.AppSettings["mongodb:connection"]), ConfigurationManager.AppSettings["mongodb:database-name"])).As <IBlobStorage>().SingleInstance();

            builder.RegisterType <ConsumeEventObserver>().As <IConsumeEventObserver>();
            builder.RegisterType <ConsumeCommandObserver>().As <IConsumeCommandObserver>();

            builder.Register(c => new RabbitMqBus(
                                 Environment.ExpandEnvironmentVariables(ConfigurationManager.AppSettings["RabbitMQ:ConnectionString"]),
                                 c.Resolve <IConsumeEventObserver>(),
                                 c.Resolve <IConsumeCommandObserver>()
                                 ))
            .As <ICommandSender>()
            .As <IEventPublisher>()
            .As <IHandlerRegistrar>()
            .SingleInstance();

            builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).Where(t =>
            {
                var interfaces = t.GetInterfaces();

                return
                (interfaces.Any(y => y.GetTypeInfo().IsGenericType&& y.GetTypeInfo().GetGenericTypeDefinition() == typeof(ICancellableCommandHandler <>)) ||
                 interfaces.Any(y => y.GetTypeInfo().IsGenericType&& y.GetTypeInfo().GetGenericTypeDefinition() == typeof(ICommandHandler <>)) ||
                 interfaces.Any(y => y.GetTypeInfo().IsGenericType&& y.GetTypeInfo().GetGenericTypeDefinition() == typeof(ICancellableEventHandler <>)) ||
                 interfaces.Any(y => y.GetTypeInfo().IsGenericType&& y.GetTypeInfo().GetGenericTypeDefinition() == typeof(IEventHandler <>)));
            });

            builder.RegisterType <ServiceProcessingControl>();

            var container = builder.Build();

            ServiceLocator.SetLocatorProvider(() => new AutofacServiceLocator(container));

            var registrar = new BusRegistrar(new CqrsLiteDependencyResolver(container));

            registrar.Register(Assembly.GetEntryAssembly());

            Log.Information($"Service {Name} v.{Version} started");

            return(true);
        }
コード例 #14
0
ファイル: Global.asax.cs プロジェクト: zhangzhouzhe/CQRS
        protected override void RegisterSignalR(BusRegistrar registrar)
        {
            base.RegisterSignalR(registrar);

            // Inform the NotificationHub that the token is the user identifier and that it can be cast directly.
            var notificationHub = DependencyResolver.Current.Resolve <INotificationHub>() as NotificationHub;

            if (notificationHub != null)
            {
                notificationHub.ConvertUserTokenToUserRsn = token => new Guid(token);
            }
        }
コード例 #15
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMemoryCache();

            // Register auto mapper
            var config = new MapperConfiguration(MapperConfigurationExtensions.AddProfiles);

            config.AssertConfigurationIsValid();

            services.AddSingleton <IMapper>(new Mapper(config));

            // Add Cqrs services
            services.AddSingleton <ITextSerializer, JsonTextSerializer>();
            services.AddSingleton <InProcessBus>(new InProcessBus());
            services.AddSingleton <ICommandSender>(y => y.GetService <InProcessBus>());
            services.AddSingleton <IEventPublisher>(y => y.GetService <InProcessBus>());
            services.AddSingleton <IHandlerRegistrar>(y => y.GetService <InProcessBus>());
            services.AddScoped <ISession, Session>();
            services.AddSingleton <IEventStore, EventStore>();
            services.AddScoped <ICache, MemoryCache>();
            services.AddScoped <IRepository>(y => new CacheRepository(new Repository(y.GetService <IEventStore>()), y.GetService <IEventStore>(), y.GetService <ICache>()));

            // Scan for commandhandlers and eventhandlers
            services.Scan(scan => scan.FromAssemblies(typeof(ProjectCommandHandler).GetTypeInfo().Assembly)
                          .AddClasses(classes => classes.Where(x => {
                var allInterfaces = x.GetInterfaces();
                return
                (allInterfaces.Any(y => y.GetTypeInfo().IsGenericType&& y.GetTypeInfo().GetGenericTypeDefinition() == typeof(IHandler <>)) ||
                 allInterfaces.Any(y => y.GetTypeInfo().IsGenericType&& y.GetTypeInfo().GetGenericTypeDefinition() == typeof(ICancellableHandler <>)));
            }))
                          .AsSelf()
                          .WithTransientLifetime()
                          );

            services.AddDbContext <EacmDbContext>(options => options.UseSqlServer(this.Configuration.GetConnectionString("DefaultConnection")));

            // Add framework services.
            services.AddMvc();

            // Register bus
            var serviceProvider = services.BuildServiceProvider();
            var registrar       = new BusRegistrar(new DependencyResolver(serviceProvider));

            registrar.Register(typeof(ProjectCommandHandler));

            return(serviceProvider);
        }
コード例 #16
0
        /// <summary>
        /// Calls <see cref="CqrsHttpApplication.SetBuses"/>, <see cref="RegisterDefaultRoutes"/>, <see cref="CqrsHttpApplication.RegisterServiceParameterResolver"/>,
        /// <see cref="ConfigureMvcOrWebApi"/>, <see cref="CqrsHttpApplication.RegisterCommandAndEventHandlers"/>, <see cref="RegisterSignalR"/>,
        /// <see cref="CqrsHttpApplication.StartBuses"/> and finally <see cref="CqrsHttpApplication.LogApplicationStarted"/>.
        /// </summary>
        protected override void Application_Start(object sender, EventArgs e)
        {
            SetBuses();

            RegisterDefaultRoutes();
            RegisterServiceParameterResolver();

            ConfigureMvcOrWebApi();

            BusRegistrar registrar = RegisterCommandAndEventHandlers();

            RegisterSignalR(registrar);

            StartBuses();

            LogApplicationStarted();
        }
コード例 #17
0
ファイル: Startup.cs プロジェクト: powerdude/CQRSlite
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMemoryCache();

            //Add Cqrs services
            services.AddSingleton <InProcessBus>(new InProcessBus());
            services.AddSingleton <ICommandSender>(y => y.GetService <InProcessBus>());
            services.AddSingleton <IEventPublisher>(y => y.GetService <InProcessBus>());
            services.AddSingleton <IHandlerRegistrar>(y => y.GetService <InProcessBus>());
            services.AddScoped <ISession, Session>();
            services.AddSingleton <IEventStore, InMemoryEventStore>();
            services.AddScoped <ICache, MemoryCache>();
            services.AddScoped <IRepository>(y => new CacheRepository(new Repository(y.GetService <IEventStore>()), y.GetService <IEventStore>(), y.GetService <ICache>()));

            services.AddTransient <IReadModelFacade, ReadModelFacade>();

            //Scan for commandhandlers and eventhandlers
            services.Scan(scan => scan
                          .FromAssemblies(typeof(InventoryCommandHandlers).GetTypeInfo().Assembly)
                          .AddClasses(classes => classes.Where(x => {
                var allInterfaces = x.GetInterfaces();
                return
                (allInterfaces.Any(y => y.GetTypeInfo().IsGenericType&& y.GetTypeInfo().GetGenericTypeDefinition() == typeof(ICommandHandler <>)) ||
                 allInterfaces.Any(y => y.GetTypeInfo().IsGenericType&& y.GetTypeInfo().GetGenericTypeDefinition() == typeof(IEventHandler <>)));
            }))
                          .AsSelf()
                          .WithTransientLifetime()
                          );

            // Add framework services.
            services.AddMvc();

            //Register bus
            var serviceProvider = services.BuildServiceProvider();
            var registrar       = new BusRegistrar(new DependencyResolver(serviceProvider));

            registrar.Register(typeof(InventoryCommandHandlers));

            return(serviceProvider);
        }
コード例 #18
0
ファイル: Startup.cs プロジェクト: msepahvand/CQRSlite
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddMemoryCache();
            var builder = new ContainerBuilder();

            services.AddSingleton <InProcessBus>(new InProcessBus());
            builder.Register <ICommandSender>(c => c.Resolve <InProcessBus>()).SingleInstance();
            builder.Register <IEventPublisher>(c => c.Resolve <InProcessBus>()).SingleInstance();
            builder.Register <IHandlerRegistrar>(c => c.Resolve <InProcessBus>());
            builder.RegisterType <Session>().As <ISession>().InstancePerLifetimeScope();
            builder.RegisterType <InMemoryEventStore>().As <IEventStore>().SingleInstance();
            builder.RegisterType <MemoryCache>().As <ICache>().InstancePerLifetimeScope();
            builder.Register <IRepository>(x =>
                                           new CacheRepository(new Repository(x.Resolve <IEventStore>()),
                                                               x.Resolve <IEventStore>(), x.Resolve <ICache>())).InstancePerLifetimeScope();
            builder.RegisterType <ReadModelFacade>().As <IReadModelFacade>().InstancePerDependency();
            var targetAssembly = typeof(InventoryCommandHandlers).GetTypeInfo().Assembly;

            builder.RegisterAssemblyTypes(targetAssembly)
            .As(type => type.GetInterfaces()
                .Where(interfacetype => interfacetype.IsAssignableFrom(typeof(ICommandHandler <>)) ||
                       interfacetype.IsAssignableFrom(typeof(IEventHandler <>))))
            .AsSelf()
            .InstancePerDependency();

            builder.Populate(services);
            this.ApplicationContainer = builder.Build();

            var autofacServiceProvider = new AutofacServiceProvider(ApplicationContainer);
            var registrar = new BusRegistrar(new DependencyResolver(autofacServiceProvider));

            registrar.Register(typeof(InventoryCommandHandlers));


            return(autofacServiceProvider);
        }
コード例 #19
0
        private static void RegisterHandlers(IServiceLocator serviceLocator)
        {
            var registrar = new BusRegistrar(serviceLocator);

            registrar.Register(typeof(CartCheckedOutEventHandler));
        }
コード例 #20
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Register the IConfiguration instance which AppConfig binds against.
            services.Configure <AppConfig>(Configuration);

            // Set symmetric security key
            string securityKey = Environment.GetEnvironmentVariable("JWT_SECURITY_KEY") ?? "JWT_SECURITY_KEY";

            _signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(securityKey));

            // Add application services
            services.AddSingleton <Microsoft.AspNetCore.Http.IHttpContextAccessor, Microsoft.AspNetCore.Http.HttpContextAccessor>();
            services.AddSingleton <Microsoft.Extensions.Configuration.IConfiguration>(Configuration);
            services.AddSingleton <IRepository <BookDto>, MongoRepository <BookDto> >();
            services.AddSingleton <IRepository <AccountDto>, MongoRepository <AccountDto> >();
            services.AddSingleton <IRepository <Security>, MongoRepository <Security> >();
            services.AddSingleton <IRepository <Price>, MongoRepository <Price> >();
            services.AddSingleton <IRepository <Period>, MongoRepository <Period> >();

            #region CQRS
            services.AddMemoryCache();

            //Add Cqrs services
            services.AddSingleton <InProcessBus>(new InProcessBus());
            services.AddSingleton <ICommandSender>(y => y.GetService <InProcessBus>());
            services.AddSingleton <IEventPublisher>(y => y.GetService <InProcessBus>());
            services.AddSingleton <IHandlerRegistrar>(y => y.GetService <InProcessBus>());
            services.AddScoped <ISession, Session>();
            services.AddSingleton <IEventStore, MongoEventStore>();
            services.AddScoped <ICache, CQRSlite.Cache.MemoryCache>();
            services.AddScoped <IRepository>(y => new CQRSlite.Cache.CacheRepository(new Repository(y.GetService <IEventStore>()), y.GetService <IEventStore>(), y.GetService <ICache>()));

            services.AddTransient <IReadModelFacade, ReadModelFacade>();

            //Scan for commandhandlers and eventhandlers
            services.Scan(scan => scan
                          .FromAssemblies(typeof(BookCommandHandlers).GetTypeInfo().Assembly)
                          .AddClasses(classes => classes.Where(x => {
                var allInterfaces = x.GetInterfaces();
                return
                (allInterfaces.Any(y => y.GetTypeInfo().IsGenericType&& y.GetTypeInfo().GetGenericTypeDefinition() == typeof(ICommandHandler <>)) ||
                 allInterfaces.Any(y => y.GetTypeInfo().IsGenericType&& y.GetTypeInfo().GetGenericTypeDefinition() == typeof(IEventHandler <>)));
            }))
                          .AsSelf()
                          .WithTransientLifetime()
                          );

            //Register bus
            var serviceProvider = services.BuildServiceProvider();
            var registrar       = new BusRegistrar(new DependencyResolver(serviceProvider));
            registrar.Register(typeof(BookCommandHandlers));

            //Register Mongo
            MongoDefaults.GuidRepresentation = MongoDB.Bson.GuidRepresentation.Standard;
            BsonClassMap.RegisterClassMap <AccountCreated>(cm =>
            {
                cm.AutoMap();
                cm.SetIdMember(cm.GetMemberMap(c => c.ObjectId));
            });
            BsonClassMap.RegisterClassMap <AccountDeleted>(cm =>
            {
                cm.AutoMap();
                cm.SetIdMember(cm.GetMemberMap(c => c.ObjectId));
            });
            BsonClassMap.RegisterClassMap <BookCreated>(cm =>
            {
                cm.AutoMap();
                cm.SetIdMember(cm.GetMemberMap(c => c.ObjectId));
            });
            BsonClassMap.RegisterClassMap <ParentAccountAssigned>(cm =>
            {
                cm.AutoMap();
                cm.SetIdMember(cm.GetMemberMap(c => c.ObjectId));
            });
            BsonClassMap.RegisterClassMap <TransactionCreated>(cm =>
            {
                cm.AutoMap();
                cm.SetIdMember(cm.GetMemberMap(c => c.ObjectId));
            });
            #endregion

            // AutoMapper
            services.AddAutoMapper();

            // Add framework services.
            services.AddMvc(
                config =>
            {
                // TODO: Define authentication policy

                /*var policy = new AuthorizationPolicyBuilder()
                 *   .RequireAuthenticatedUser()
                 *   .Build();
                 * config.Filters.Add(new AuthorizeFilter(policy));*/
                // Bad request filter
                config.Filters.Add(new BadRequestActionFilter());
            }
                ).AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining <Startup>()); // FluentValidation

            // Set up authorization policies.
            services.AddAuthorization(options =>
            {
                options.AddPolicy(Constants.AuthorizationPolicy,
                                  policy => policy.RequireClaim(Constants.ClaimType, Constants.ClaimValue));
            });
            services.AddAuthentication(o =>
            {
                o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                o.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            });

            // Get options from app settings
            var jwtAppSettingOptions = Configuration.GetSection(nameof(JwtIssuerOptions));

            // Configure JwtIssuerOptions
            services.Configure <JwtIssuerOptions>(options =>
            {
                options.Issuer             = jwtAppSettingOptions[nameof(JwtIssuerOptions.Issuer)];
                options.SigningCredentials = new SigningCredentials(_signingKey, SecurityAlgorithms.HmacSha256);
            });
        }
コード例 #21
0
        private static void UseAutoFac()
        {
            var config = AddConfig();

            var builder = new ContainerBuilder();

            builder.RegisterInstance(config)
            .As <IAppConfig>()
            .SingleInstance();

            builder.Register(
                c => new MongoDbDataStoreOptions().UseHost(config.MongoDbDataStore?.Host)
                .UsePort(config.MongoDbDataStore?.Port)
                .UseDatabase(config.MongoDbDataStore?.Database));

            builder.RegisterType <MongoDbDataStore>()
            .As <IDataStore>()
            .SingleInstance();

            builder.Register(
                c => new MongoDbEventStoreOptions().UseHost(config.MongoDbEventStore?.Host)
                .UsePort(config.MongoDbEventStore?.Port)
                .UseDatabase(config.MongoDbEventStore?.Database)
                .UseCollection(config.MongoDbEventStore?.Collection));

            builder.RegisterType <MongoDbEventStore>()
            .As <IEventStore>()
            .SingleInstance();

            builder.RegisterType <Session>()
            .As <ISession>()
            .SingleInstance();

            builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
            .Where(t => t.Name.EndsWith("Translator") || t.Name.EndsWith("Handler"))
            .AsImplementedInterfaces()
            .AsSelf();

            builder.RegisterType <DevicesWriteService>()
            .As <IDevicesWriteService>();

            builder.RegisterType <Repository>();

            builder.Register(c => new CacheRepository(c.Resolve <Repository>(), c.Resolve <IEventStore>()))
            .As <IRepository>()
            .SingleInstance();

            builder.RegisterType <InProcessBus>()
            .As <ICommandSender>()
            .As <IHandlerRegistrar>()
            .As <IEventPublisher>()
            .SingleInstance();

            builder.RegisterGeneric(typeof(TransactionalHandler <>));

            container = builder.Build();

            var registrar = new BusRegistrar(container);

            registrar.Register(typeof(CreateDeviceHandler));
        }
コード例 #22
0
 /// <summary>
 /// Register SignalR to the path /signalr
 /// </summary>
 protected virtual void RegisterSignalR(BusRegistrar registrar)
 {
     RouteTable.Routes.MapOwinPath("/signalr");
     registrar.Register(typeof(TEventToHubProxy));
 }
コード例 #23
0
ファイル: Global.asax.cs プロジェクト: tuga1975/CQRS
        private void RegisterHandlers()
        {
            var registrar = new BusRegistrar(Cqrs.Configuration.DependencyResolver.Current);

            registrar.Register(typeof(InventoryCommandHandlers), typeof(DtoCommandHandler <ISingleSignOnToken, UserDto>));
        }
コード例 #24
0
ファイル: Global.asax.cs プロジェクト: zarmsen/CQRS
        private void RegisterHandlers(IDependencyResolver DependencyResolver)
        {
            var registrar = new BusRegistrar(DependencyResolver);

            registrar.Register(typeof(InventoryCommandHandlers), typeof(DtoCommandHandler <ISingleSignOnToken, UserDto>));
        }
コード例 #25
0
 /// <summary>
 /// Register the all Cqrs command handlers
 /// </summary>
 protected virtual void RegisterCqrsCommandHandlers(BusRegistrar registrar)
 {
     // This will load all the handlers from the domain assembly by reading all command handlers AND event handlers in the same assembly as the provided type
     OnCqrsCommandHandlersRegistered();
 }
コード例 #26
0
ファイル: Global.asax.cs プロジェクト: girish66/CQRSlite
        private void RegisterHandlers(IServiceLocator serviceLocator)
        {
            var registrar = new BusRegistrar(serviceLocator);

            registrar.Register(typeof(InventoryCommandHandlers));
        }
コード例 #27
0
ファイル: CoreHost.cs プロジェクト: tuga1975/CQRS
        /// <summary>
        /// Start the <see cref="BusRegistrar"/> by calling <see cref="BusRegistrar.Register(System.Type[])"/> passing <see cref="HandlerTypes"/>
        /// </summary>
        protected virtual void StartBusRegistrar()
        {
            var registrar = new BusRegistrar(DependencyResolver.Current);

            registrar.Register(HandlerTypes);
        }
コード例 #28
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json");

            Configuration = builder.Build();

            services.AddMemoryCache();

            //Add Cqrs services
            services.AddSingleton <InProcessBus>(new InProcessBus());
            services.AddSingleton <ICommandSender>(y => y.GetService <InProcessBus>());
            services.AddSingleton <IEventPublisher>(y => y.GetService <InProcessBus>());
            services.AddSingleton <IHandlerRegistrar>(y => y.GetService <InProcessBus>());
            services.AddScoped <ISession, Session>();

            //Factory to turn scanned IEvents into Type
            services.AddSingleton <IEventStore, EventStore>
                (sProvider => new EventStore(
                    sProvider.GetRequiredService <IEventPublisher>(),
                    sProvider.GetRequiredService <CQRSCode.ReadModel.Repository.MongoOptions>(),
                    sProvider.GetServices <EventType>().ToList()));

            services.AddScoped <ICache, CQRSlite.Cache.MemoryCache>();
            services.AddScoped <IRepository>(y => new CacheRepository(new Repository(y.GetService <IEventStore>()), y.GetService <IEventStore>(), y.GetService <ICache>()));

            // REFACTORING REQUIRED: DIDN'T MANAGE TO PARSE JSON SETTINGS USING Configuration.GetSection("mongo").Get
            // var config = Configuration.GetSection("configuredClients").
            //services.Configure<CQRSCode.ReadModel.Repository.MongoOptions>(Configuration.GetSection("mongo"));
            services.AddTransient <CQRSCode.ReadModel.Repository.MongoOptions>(sp =>
            {
                var mOpt = new CQRSCode.ReadModel.Repository.MongoOptions();
                mOpt.ConnectionString = Configuration["mongo:connectionString"];
                mOpt.Database         = Configuration["mongo:database"];
                return(mOpt);
            });
            // services.Configure<CQRSCode.ReadModel.Repository.MongoOptions>(options => Configuration.GetSection("mongo").Get<CQRSCode.ReadModel.Repository.MongoOptions>());

            services.AddTransient(
                typeof(CQRSCode.ReadModel.Repository.IRepository <>),
                typeof(CQRSCode.ReadModel.Repository.Repository <>)
                );

            //Scan for commandhandlers and eventhandlers
            services.Scan(scan => scan
                          .FromAssemblies(typeof(CategoryCommandHandlers).GetTypeInfo().Assembly)
                          .AddClasses(classes => classes.Where(x => {
                var allInterfaces = x.GetInterfaces();
                return
                (allInterfaces.Any(y => y.GetTypeInfo().IsGenericType&& y.GetTypeInfo().GetGenericTypeDefinition() == typeof(IHandler <>)) ||
                 allInterfaces.Any(y => y.GetTypeInfo().IsGenericType&& y.GetTypeInfo().GetGenericTypeDefinition() == typeof(ICancellableHandler <>)));
            }))
                          .AsSelf()
                          .WithTransientLifetime()
                          );

            //Register tous les IEvent
            // services.Scan(scan => scan
            //     .FromAssemblies(typeof(CQRSCode.ReadModel.Events.ProductCreated).GetTypeInfo().Assembly)
            //         .AddClasses(classes => classes.Where(x => {
            //             var allInterfaces = x.GetInterfaces();

            //             return
            //                 allInterfaces.Any(y => y == typeof(IEvent));
            //         }))
            //         .As(type => EventType<type>)
            //         //.AsImplementedInterfaces()
            //         .WithTransientLifetime()
            // );

            typeof(CQRSCode.ReadModel.Events.ProductCreated)
            .GetTypeInfo().Assembly.ExportedTypes
            .ToList().ForEach(type => {
                if (type.GetInterfaces().Any(iType => iType == typeof(IEvent)))
                {
                    services.AddTransient <EventType, EventType>(sProvider => new EventType(type));
                }
            });

            // foreach (var service in services)
            // {
            //     System.Console.WriteLine(service.ServiceType.Name + " " + service.ServiceType.AssemblyQualifiedName);
            // }

            //Register bus
            var serviceProvider = services.BuildServiceProvider();

            var registrar = new BusRegistrar(new DependencyResolver(serviceProvider));

            registrar.Register(typeof(CategoryCommandHandlers));

            // Add framework services.
            services.AddMvc();

            // services.AddAutoMapper(typeof(Startup));

            var config = new AutoMapper.MapperConfiguration(cfg =>
            {
                cfg.AddProfile <MappingProfile>();
            });

            var mapper = config.CreateMapper();

            services.AddSingleton <IMapper>(mapper);
        }