コード例 #1
0
        public void TestAtQueryKasterQueryBusExceptionHvisQueryHandlerIkkeErRegistreret()
        {
            var queryBus = new QueryBus(CreateContainer());
            var query    = new TestQueryWithoutQueryHandler();

            Assert.Throws <QueryBusException>(() => queryBus.Query <TestQueryWithoutQueryHandler, Guid>(query));
        }
コード例 #2
0
 public async Task <CalculatedPriceResponse> Get(Guid productId)
 {
     return(await QueryBus.Execute <GetCalculatedPriceQuery, CalculatedPriceResponse>(new GetCalculatedPriceQuery
     {
         ProductId = productId
     }));
 }
コード例 #3
0
        public async Task <CategoriesResponse> GetAll()
        {
            var categoriesQuery    = new CategoriesQuery();
            var categoriesResponse = await QueryBus.Execute <CategoriesQuery, CategoriesResponse>(categoriesQuery);

            return(categoriesResponse);
        }
        protected override Task <Uri> GenerateAuthorizeUriAsync(HttpContext httpContext, Guid stateIdentifier)
        {
            NullGuard.NotNull(httpContext, nameof(httpContext));

            IGetAuthorizeUriForMicrosoftGraphQuery query = new GetAuthorizeUriForMicrosoftGraphQuery(GetRedirectUriForMicrosoftGraph(httpContext.Request), stateIdentifier);

            return(QueryBus.QueryAsync <IGetAuthorizeUriForMicrosoftGraphQuery, Uri>(query));
        }
コード例 #5
0
 public async Task <LocalizationObjectResponse> GetLocalizationObject(CultureInfo culture, string category = null)
 {
     return(await QueryBus.Execute <LocalizationObjectQuery, LocalizationObjectResponse>(new LocalizationObjectQuery
     {
         Culture = culture,
         Category = category
     }));
 }
コード例 #6
0
        private void Initialize()
        {
            ApplicationInformation =
                QueryBus.Process <GetApplicationInformation, ApplicationInformationDto>(new GetApplicationInformation());

            Logger.Info($"Start applicaiton. Version: {ApplicationInformation.Version}.");
            Logger.Info($"Show view: {GetType().Name}.");

            StartRunTimer();
        }
コード例 #7
0
        public async Task <ProductsWithPricesResponse> GetProducts(int page = 0, int itemsPerPage = 10)
        {
            var productsWithPricesQuery = new ProductsWithPricesQuery
            {
                ItemsOnPage = itemsPerPage,
                Page        = page
            };

            return(await QueryBus.Execute <ProductsWithPricesQuery, ProductsWithPricesResponse>(productsWithPricesQuery));
        }
コード例 #8
0
        public void TestAtQueryKalderQueryHandler()
        {
            var queryBus = new QueryBus(CreateContainer());
            var query    = new TestQuery();
            var id       = queryBus.Query <TestQuery, Guid>(query);

            Assert.That(id, Is.Not.Null);
            Assert.That(id.GetType(), Is.EqualTo(typeof(Guid)));
            Assert.That(id, Is.Not.EqualTo(Guid.Empty));
        }
コード例 #9
0
        static void Main(string[] args)
        {
            ICommandBus commandBus = new CommandBus();
            IQueryBus   queryBus   = new QueryBus();
            var         cmd        = new ActorInsertCommand
            {
                FirstName = "Mst",
                LastName  = "Scl"
            };

            var result   = commandBus.Send <ActorInsertCommand, LongCommandResult>(cmd);
            var response = queryBus.Send <ActorReadAllQuery, ActorList>(new ActorReadAllQuery());
            //var serviceDetailTypeHandler = new ServiceDetailTypeInsertCommandHandler();

            //var result = serviceDetailTypeHandler.Handle(cmd);
            var id = result.Data.ReturnValue ?? -1L;

            Console.WriteLine("ReturnValue: " + result.Data?.ReturnValue);
            Console.WriteLine("ResponseCode: " + result.ResponseCode);
            Console.WriteLine("ResponseMessage: " + result.ResponseMessage);
            Thread.Sleep(2000);
            //var updateHandler = new ServiceDetailTypeUpdateCommandHandler();
            //result = updateHandler.Handle(
            //    new ServiceDetailTypeUpdateCommand
            //    {
            //        Id = id,
            //        DetailTypeName = "My First Service Updated",
            //        UpdatedBy = 1
            //    });
            result = commandBus.Send <ActorUpdateCommand, LongCommandResult>(new ActorUpdateCommand
            {
                FirstName = "Mst Updated",
                LastName  = "Scl Updated",
                ActorId   = (int)id
            });
            Console.WriteLine("ReturnValue: " + result.Data?.ReturnValue);
            Console.WriteLine("ResponseCode: " + result.ResponseCode);
            Console.WriteLine("ResponseMessage: " + result.ResponseMessage);
            Thread.Sleep(2000);
            //var deleteHandler = new ServiceDetailTypeDeleteCommandHandler();
            //result = deleteHandler.Handle(
            //    new ServiceDetailTypeDeleteCommand
            //    {
            //        Id = id
            //    });
            result = commandBus.Send <ActorDeleteCommand, LongCommandResult>(new ActorDeleteCommand
            {
                Id = (int)id
            });
            Console.WriteLine("ReturnValue: " + result.Data?.ReturnValue);
            Console.WriteLine("ResponseCode: " + result.ResponseCode);
            Console.WriteLine("ResponseMessage: " + result.ResponseMessage);
            Console.ReadKey();
        }
コード例 #10
0
ファイル: QueryBusTest.cs プロジェクト: GFoley83/todo-cqrs
        public void Should_handle_query_with_correct_query_handler()
        {
            var container = new Container();

            container.Register <IQueryHandler <TestQuery, TestQueryResult>, TestQueryHandler>();

            var queryBus = new QueryBus(container);
            var result   = queryBus.Query <TestQuery, TestQueryResult>(new TestQuery());

            Assert.IsTrue(result.QueryHandled);
        }
コード例 #11
0
        public void HappyPath()
        {
            var query          = Substitute.For <IQuery <string> >();
            var queryPerformer = Substitute.For <IQueryPerformer <IQuery <string>, string> >();

            queryPerformer.Perform(query).Returns("Succes");
            var queryBus = new QueryBus(t => queryPerformer);

            var queryResult = queryBus.Perform(query);

            Assert.Equal("Succes", queryResult);
        }
コード例 #12
0
ファイル: Program.cs プロジェクト: nrslib/CQRSBus
        private static void SampleQueryHandlerWithInstance()
        {
            var injector = new SimpleInjector();

            var queryBus = new QueryBus(injector);

            queryBus.RegisterInstance(new TestQueryHandler());

            var query    = new TestQuery("srn");
            var response = queryBus.Handle(query);

            Console.WriteLine(response.Message);
        }
コード例 #13
0
        private static async Task Go()
        {
            Console.WriteLine("Starting");
            Console.WriteLine("Dependency Injection - Register All");
            // Dependency Injection
            var di = new TinyDependencyInjection();

            di.AddDependency(Dependency.Create().For <ICommandHandler <ICommand> >().Use <Declaration_CommandHandler>());
            di.AddDependency(Dependency.Create().For <IRepository <Declaration> >().Use <DeclarationEventsRepository <Declaration> >().SetBehaviour(DIBehaviour.Singleton));
            di.AddDependency(Dependency.Create().For <IRepository <Event> >().Use <DeclarationRepository <Event> >().SetBehaviour(DIBehaviour.Singleton));
            di.AddDependency(Dependency.Create().For <IRepository <Event> >().Use <DeclarationRepository <Event> >().SetBehaviour(DIBehaviour.Singleton));
            di.AddDependency(Dependency.Create().For <IQueryHandler <Declaration_GetQuery, Declaration> >().Use <Declaration_QueryHandler>().SetBehaviour(DIBehaviour.Singleton));
            di.Init(); // Init All Objects

            // CommandBus - need for send Command.
            var CommandBus = new CommandBus(di);
            // QueryBus - need for send Queries and Receive Data
            var QueryBus = new QueryBus(di);

            Console.WriteLine("Create two Entities");
            // Create two commands which Create Declaration objects in Repos and Write to EventRepo
            var CreateCommand1 = new Declaration_CreateCommand()
            {
                Id = "1", Title = "CreateCommand1", Description = "This is First Command1"
            };
            await CommandBus.SendAsync(CreateCommand1);

            var CreateCommand2 = new Declaration_CreateCommand()
            {
                Id = "2", Title = "CreateCommand2", Description = "This is First Command2"
            };
            await CommandBus.SendAsync(CreateCommand2);

            Console.WriteLine("Get Data From First Entity");
            // Create query and get data about first Declaration object from repo
            var Get1Query = new Declaration_GetQuery()
            {
                Id = "1"
            };
            var res1 = await QueryBus.GetAsync <Declaration_GetQuery, Declaration>(Get1Query);

            var Get2Query = new Declaration_GetQuery()
            {
                Id = "2"
            };
            var res2 = await QueryBus.GetAsync <Declaration_GetQuery, Declaration>(Get2Query);

            Console.WriteLine(string.Format("Id = {0}; Title = {1}; Description = {2}", res1.Id, res1.Title, res1.Description));
            Console.WriteLine(string.Format("Id = {0}; Title = {1}; Description = {2}", res2.Id, res2.Title, res2.Description));
        }
コード例 #14
0
        public async Task <AccessTokenModel> LogIn(string email, string password)
        {
            var query = new UserIdByCredentialsQuery
            {
                Email    = email,
                Password = _sha512Service.Calculate(password)
            };

            var userIdResponse = await QueryBus.Execute <UserIdByCredentialsQuery, UserIdByCredentialsResponse>(query);

            var accessToken = await GenerateRefreshAndAccessToken(userIdResponse.UserId);

            return(accessToken);
        }
コード例 #15
0
        Given_TestQuery_AndTestQueryHandlerNotRegistered_When_SendAsync_Then_HandlerNotFoundExceptionIsThrown()
        {
            //Arrange
            var query = new TestQuery
            {
                ReturnValue = "ReturnValue"
            };
            Func <Type, object> resolver = type => null;
            var queryBus = new QueryBus(resolver);
            //Act
            Func <Task> handleAction = () => queryBus.SendAsync(query);

            //Assert
            Assert.ThrowsAsync <HandlerNotFoundException>(() => handleAction.Invoke());
        }
コード例 #16
0
ファイル: Program.cs プロジェクト: nrslib/CQRSBus
        private static void SampleQueryHandler()
        {
            var injector = new SimpleInjector();

            injector.Register <IQueryHandler <TestQuery, TestResponse> >(() => new TestQueryHandler());

            var queryBus = new QueryBus(injector);

            queryBus.Register <TestQuery, IQueryHandler <TestQuery, TestResponse> >();

            var query    = new TestQuery("srn");
            var response = queryBus.Handle(query);

            Console.WriteLine(response.Message);
        }
コード例 #17
0
        public void TypeCheck()
        {
            var  query          = new TestQuery();
            var  queryPerformer = new TestQueryPerformer("Whatever");
            Type requestedType  = typeof(void);
            var  queryBus       = new QueryBus(t =>
            {
                requestedType = t;
                return(queryPerformer);
            });

            queryBus.Perform(query);

            Assert.Equal(typeof(IQueryPerformer <TestQuery, string>), requestedType);
        }
コード例 #18
0
        Given_TestQuery_AndTestQueryHandlerNotRegistered_When_SendAsync_Then_HandlerNotFoundExceptionIsThrown()
        {
            //Arrange
            var services = new ServiceCollection();
            var query    = new TestQuery
            {
                ReturnValue = "ReturnValue"
            };
            var serviceProvider = services.BuildServiceProvider();
            var queryBus        = new QueryBus(serviceProvider.GetService);
            //Act
            Func <Task> handleAction = () => queryBus.SendAsync(query);

            //Assert
            Assert.ThrowsAsync <HandlerNotFoundException>(() => handleAction.Invoke());
        }
コード例 #19
0
ファイル: UnitTest2.cs プロジェクト: akawa777/DomainShell
        public UnitTest2()
        {
            CommandResultReposiotry commandResultReposiotry = new CommandResultReposiotry();
            CustomerRepository customerRepository = new CustomerRepository();
            CustomerCommandHandler customerCommandHandler = new CustomerCommandHandler(customerRepository, commandResultReposiotry);
            CommandResultQueryaHandler commandResultQueryaHandler = new CommandResultQueryaHandler(commandResultReposiotry);

            CommandBus commandBus = new CommandBus();
            commandBus.Registerd<CustomerCreateCommand>(customerCommandHandler);

            QueryBus queryBus = new QueryBus();
            queryBus.Registerd<CommandResultQuery>(commandResultQueryaHandler);

            _commandBus = commandBus;
            _queryBus = queryBus;
        }
コード例 #20
0
        public async Task Given_TestQuery_When_SendAsync_Then_ResultIsReturned()
        {
            //Arrange
            var query = new TestQuery
            {
                ReturnValue = "ReturnValue"
            };
            var queryHandler             = new TestQueryHandler();
            Func <Type, object> resolver = type => { return(queryHandler); };
            var queryBus = new QueryBus(resolver);
            //Act
            var result = await queryBus.SendAsync(query, CancellationToken.None);

            //Assert
            Assert.That(result, Is.EqualTo(query.ReturnValue));
        }
コード例 #21
0
        public ActionResult <string> GetAllAlterations()
        {
            var filter = new GetAlterationsFilter();

            try
            {
                var alterations = QueryBus
                                  .Dispatch <GetAlterationsFilter, CollectionQueryResult <GetAlterationsDto> >
                                      (filter);

                return(Ok(alterations.Items));
            }
            catch (Exception ex)
            {
                return(StatusCode(500, ex.Message));
            }
        }
コード例 #22
0
        public async Task <AccessTokenModel> RefreshToken(string refreshToken, string accessToken)
        {
            var userId = _accessTokenService.GetPayload <AuthPayload>(accessToken).UserId;

            var refreshTokenResponse = await QueryBus.Execute <UserRefreshTokenQuery, UserRefreshTokenResponse>(
                new UserRefreshTokenQuery
            {
                UserId = userId
            });

            if (refreshToken != refreshTokenResponse.RefreshToken)
            {
                //TODO
                throw new NotImplementedException();
            }

            return(await GenerateRefreshAndAccessToken(userId));
        }
コード例 #23
0
        public async Task Given_TestQuery_When_SendAsync_Then_ResultIsReturned()
        {
            //Arrange
            var services = new ServiceCollection();
            var query    = new TestQuery
            {
                ReturnValue = "ReturnValue"
            };
            var queryHandler = new TestQueryHandler();

            services.AddScoped <IQueryHandler <TestQuery, string> >(provider => queryHandler);
            var serviceProvider = services.BuildServiceProvider();
            var queryBus        = new QueryBus(serviceProvider.GetService);
            //Act
            var result = await queryBus.SendAsync(query, CancellationToken.None);

            //Assert
            Assert.That(result, Is.EqualTo(query.ReturnValue));
        }
コード例 #24
0
        public void SetUp()
        {
            _query   = new FakeQuery();
            _handler = new FakeQueryHandler();

            _kernel = new StandardKernel();
            _kernel.Bind <IQueryHandler <FakeQuery, bool> >()
            .ToConstant(_handler);

            _mockLogger = new Mock <IQueryLogger>();

            _mockDialogService = new Mock <IExceptionDialogService>();

            _bus = new QueryBus(
                _mockLogger.Object,
                _mockDialogService.Object);

            QueryBus.Kernel = _kernel;
        }
コード例 #25
0
        public async Task <LoginResponseModel> Login(LoginRequestModel model)
        {
            var customerIdByCredentialsQuery = new CustomerIdByCredentialsQuery
            {
                Email    = model.Email,
                Password = _sha512Service.Calculate(model.Password)
            };

            var customerIdResponse =
                await QueryBus.Execute <CustomerIdByCredentialsQuery, CustomerIdResponse>(customerIdByCredentialsQuery);

            var token = _tokenService.Create(new TokenPayload
            {
                CustomerId = customerIdResponse.Id
            });

            return(new LoginResponseModel
            {
                Token = token
            });
        }
コード例 #26
0
        public override async Task <HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext,
                                                                      CancellationToken cancellationToken)
        {
            if (!controllerContext.Request.Headers.TryGetValues("AccessToken", out var allTokens))
            {
                throw new AuthorizationRequiredException();
            }

            var token = allTokens.First();

            var payload = _accessTokenService.GetPayload <AuthPayload>(token);

            var refreshTokenResponse = await QueryBus.Execute <UserRefreshTokenQuery, UserRefreshTokenResponse>(
                new UserRefreshTokenQuery
            {
                UserId = payload.UserId
            });

            _accessTokenService.Verify(token, refreshTokenResponse.RefreshToken);

            return(await base.ExecuteAsync(controllerContext, cancellationToken));
        }
コード例 #27
0
ファイル: Program.cs プロジェクト: kwarwas/ztp-prog-core
        static void Main()
        {
            var queryHandlerRegistrar = new HandlerRegistrar <IQueryHandler>();

            queryHandlerRegistrar.Register <GetPersonList>(new PersonHandler());
            queryHandlerRegistrar.Register <GetPersonDetails>(new PersonHandler());
            var queryBus = new QueryBus(queryHandlerRegistrar);

            var people = queryBus.Query <GetPersonList, IEnumerable <PersonListItemRecord> >(new GetPersonList());

            Console.WriteLine("People");

            foreach (var person in people.Result)
            {
                Console.WriteLine($"{person.Id} {person.LastName} {person.AddressesCount}");
            }

            Console.WriteLine("Person with id = 1");

            var personDetails = queryBus.Query <GetPersonDetails, PersonDetailsRecord>(new GetPersonDetails(1));

            Console.WriteLine($"{personDetails.Result.FirstName} {personDetails.Result.LastName}");
        }
コード例 #28
0
        public ActionResult <string> GetAlteration(Guid?suitId)
        {
            if (suitId == null)
            {
                return(StatusCode(500, "Invalid SuitId"));
            }
            var filter = new GetAlterationsFilter()
            {
                SuitId = suitId,
            };

            try
            {
                var alterations = QueryBus
                                  .Dispatch <GetAlterationsFilter, CollectionQueryResult <GetAlterationsDto> >
                                      (filter);

                return(Ok(alterations.Items.FirstOrDefault()));
            }
            catch (Exception ex)
            {
                return(StatusCode(500, ex.Message));
            }
        }
コード例 #29
0
        public async Task <AllProductsResponse> Get()
        {
            var products = await QueryBus.Execute <GetAllProductsQuery, AllProductsResponse>(new GetAllProductsQuery());

            return(products);
        }
コード例 #30
0
        /// <summary>
        /// 非批量保存车辆信息
        /// </summary>
        /// <param name="busArr">车辆信息</param>
        /// <returns></returns>
        private static bool SaveBusNotBatch(QueryBus.Detail[] busArr, ref int updateCount)
        {
            string nowTicks = Common.LocalDateTimeToUtcLong(GlobalStaticObj_Server.Instance.CurrentDateTime).ToString();
            int busIndex = 0;//列表索引
            int busCount = 10000;//每批执行条数
            //busCount = busArr.Count();
            int busSum = busArr.Count() / busCount + 1;//执行批数
            int busSumCount = busArr.Count();
            //int contactSum = 3;
            bool flag = true;//执行结果
            DateTime startDate = DateTime.Now;
            YuTongDic dic = new YuTongDic();
            //车辆
            DataTable dtVehicle = DBHelper.GetTable("获取车辆信息车辆ID", GlobalStaticObj_Server.DbPrefix + GlobalStaticObj_Server.Instance.MainAccCode, "tb_vehicle", "v_id,turner", null, null, null);
            //车辆司机
            DataTable dtDriver = DBHelper.GetTable("获取车辆司机关系表中的司机ID", GlobalStaticObj_Server.DbPrefix + GlobalStaticObj_Server.Instance.MainAccCode, "tr_driver_vehicle", "driver_id,v_id", null, null, null);
            DataTable dtContacts = DBHelper.GetTable("获取联系人", GlobalStaticObj_Server.DbPrefix + GlobalStaticObj_Server.Instance.MainAccCode, "tb_contacts", "cont_id,cont_crm_guid,cont_name", "cont_crm_guid is not null", null, null);
            //品牌
            DataTable dtBrand = DBHelper.GetTable("获取品牌", GlobalStaticObj_Server.DbPrefix + GlobalStaticObj_Server.Instance.MainAccCode, "sys_dictionaries a inner join sys_dictionaries b on a.dic_id=b.parent_id", "b.dic_id,b.dic_name", "a.dic_code='sys_vehicle_brand'", "", "");
            //车型
            DataTable dtVehicleModels = DBHelper.GetTable("获取车型信息", GlobalStaticObj_Server.DbPrefix + GlobalStaticObj_Server.Instance.MainAccCode, "tb_vehicle_models", "models_crm_id,vm_id", "isnull(models_crm_id,'')<>''", "", "");
            #region 初始化表列
            ///车辆表
            DataTable dt = new DataTable();
            List<DataRow> listTbVehicle = new List<DataRow>();
            dt.Columns.Add(new DataColumn("v_id", typeof(string)));
            dt.Columns.Add(new DataColumn("data_source", typeof(string)));
            dt.Columns.Add(new DataColumn("license_plate", typeof(string)));
            dt.Columns.Add(new DataColumn("v_brand", typeof(string)));
            dt.Columns.Add(new DataColumn("vin", typeof(string)));
            dt.Columns.Add(new DataColumn("v_model", typeof(string)));
            dt.Columns.Add(new DataColumn("carbuy_date", typeof(long)));
            dt.Columns.Add(new DataColumn("engine_num", typeof(string)));
            dt.Columns.Add(new DataColumn("turner", typeof(string)));
            dt.Columns.Add(new DataColumn("customer_unit", typeof(string)));
            dt.Columns.Add(new DataColumn("use_unit", typeof(string)));
            dt.Columns.Add(new DataColumn("vehicle_use", typeof(string)));
            dt.Columns.Add(new DataColumn("operating_line", typeof(string)));
            dt.Columns.Add(new DataColumn("point_departure", typeof(string)));
            dt.Columns.Add(new DataColumn("cont_name", typeof(string)));
            dt.Columns.Add(new DataColumn("cont_phone", typeof(string)));
            dt.Columns.Add(new DataColumn("place_arrival", typeof(string)));
            dt.Columns.Add(new DataColumn("warranty_period", typeof(int)));
            dt.Columns.Add("status", typeof(string));
            dt.Columns.Add(new DataColumn("warranty_mileage", typeof(decimal)));
            dt.Columns.Add(new DataColumn("enable_flag", typeof(string)));
            dt.Columns.Add(new DataColumn("create_by", typeof(string)));
            dt.Columns.Add(new DataColumn("create_time", typeof(long)));
            ///车辆司机表
            DataTable dtTbDriver = new DataTable();
            List<DataRow> listTbDriver = new List<DataRow>();
            dtTbDriver.Columns.Add(new DataColumn("driver_id", typeof(string)));
            dtTbDriver.Columns.Add(new DataColumn("driver_name", typeof(string)));
            dtTbDriver.Columns.Add(new DataColumn("driver_phone", typeof(string)));
            dtTbDriver.Columns.Add(new DataColumn("enable_flag", typeof(string)));
            dtTbDriver.Columns.Add(new DataColumn("create_by", typeof(string)));
            dtTbDriver.Columns.Add(new DataColumn("create_time", typeof(long)));
            ///车辆司机关联表
            DataTable dtTrDriver = new DataTable();
            List<DataRow> listTrDriver = new List<DataRow>();
            dtTrDriver.Columns.Add(new DataColumn("dir_v_id", typeof(string)));
            dtTrDriver.Columns.Add(new DataColumn("v_id", typeof(string)));
            dtTrDriver.Columns.Add(new DataColumn("driver_id", typeof(string)));
            #endregion
            for (int i = 0; i < busSum; i++)
            {
                List<SysSQLString> list = new List<SysSQLString>();
                dt.Rows.Clear();
                dtTbDriver.Rows.Clear();
                dtTrDriver.Rows.Clear();
                listTbDriver.Clear();
                listTbVehicle.Clear();
                listTrDriver.Clear();
                for (int y = busIndex; y < busCount; y++)
                {
                    int index = i * busCount + y;
                    if (index >= busSumCount)
                    {
                        break;
                    }
                    QueryBus.Detail item = busArr[index];
                    string v_id = null;
                    string dtCarBuyDate = "";
                    //购买日期为空处理
                    if (!String.IsNullOrEmpty(item.carbuy_date))
                    {
                        dtCarBuyDate = Common.LocalDateTimeToUtcLong(Convert.ToDateTime(item.carbuy_date)).ToString();
                    }
                    string vehicle_use = dic.GetLocalDicID("vehicle_use", item.vehicle_use);
                    string cont_id = string.Empty;//联系人ID转换成本地ID
                    if (!string.IsNullOrEmpty(item.cont_name))
                    {
                        DataRow[] drsContacts = dtContacts.Select(string.Format("cont_crm_guid='{0}'", item.cont_name));
                        if (drsContacts.Count() > 0)
                        {
                            cont_id = drsContacts[0]["cont_id"].ToString();
                        }
                    }
                    DataRow[] drs = dtVehicle.Select("turner='" + item.turner + "'");
                    if (drs.Count() > 0)
                    {
                        v_id = drs[0]["v_id"].ToString();
                    }

                    string brand_id = string.Empty;//品牌ID
                    DataRow[] drsBrand = dtBrand.Select(string.Format("dic_name='{0}'", item.v_brand));
                    if (drsBrand.Count() > 0)
                    {
                        brand_id = drsBrand[0]["dic_id"].ToString();
                    }
                    string models_id = string.Empty;//车型ID
                    DataRow[] drsModels = dtVehicleModels.Select(string.Format("models_crm_id='{0}'", item.v_model));
                    if (drsModels.Count() > 0)
                    {
                        models_id = drsModels[0]["vm_id"].ToString();
                    }
                    #region 验证字段长度
                    //string file = string.Empty;
                    //if (item.license_plate.Length > 30)
                    //{
                    //    file = "license_plate";
                    //}
                    //if (item.v_brand.Length > 40)
                    //{
                    //    file = "v_brand";
                    //}
                    //if (item.v_model.Length > 40)
                    //{
                    //    file = "v_model";
                    //}
                    //if (item.vin.Length > 20)
                    //{
                    //    file = "vin";
                    //}
                    //if (item.engine_num.Length > 30)
                    //{
                    //    file = "engine_num";
                    //}
                    //if (item.turner.Length > 50)
                    //{
                    //    file = "turner";
                    //}
                    //if (item.customer_unit.Length > 50)
                    //{
                    //    file = "customer_unit";
                    //}
                    //if (item.use_unit.Length > 50)
                    //{
                    //    file = "use_unit";
                    //}
                    //if (vehicle_use.Length > 50)
                    //{
                    //    file = "vehicle_use";
                    //}
                    //if (item.operating_line.Length > 50)
                    //{
                    //    file = "operating_line";
                    //}
                    //if (item.point_departure.Length > 100)
                    //{
                    //    file = "point_departure";
                    //}
                    //if (item.cont_phone.Length > 50)
                    //{
                    //    file = "cont_phone";
                    //}
                    //if (item.place_arrival.Length > 100)
                    //{
                    //    file = "place_arrival";
                    //}
                    //if (!string.IsNullOrEmpty(file))
                    //{
                    //    return false;
                    //}
                    #endregion
                    if (!string.IsNullOrEmpty(v_id))
                    {
                        #region 更新语句
                        StringBuilder strSql = new StringBuilder();
                        SysSQLString sysSQLString = new SysSQLString();
                        sysSQLString.cmdType = CommandType.Text;
                        sysSQLString.Param = new Dictionary<string, string>();
                        strSql.Append("update tb_vehicle set ");
                        strSql.AppendFormat(" data_source= '{0}' , ", (int)DataSources.EnumDataSources.YUTONG);
                        strSql.AppendFormat(" license_plate= '{0}' , ", item.license_plate);
                        strSql.AppendFormat(" v_brand= '{0}' , ", brand_id);
                        strSql.AppendFormat(" vin= '{0}' , ", item.vin);
                        strSql.AppendFormat(" v_model= '{0}' , ", models_id);
                        if (!string.IsNullOrEmpty(dtCarBuyDate))
                        {
                            strSql.AppendFormat(" carbuy_date= {0} , ", dtCarBuyDate);
                        }
                        strSql.AppendFormat(" engine_num= '{0}' , ", item.engine_num);
                        strSql.AppendFormat(" turner= '{0}' , ", item.turner);
                        strSql.AppendFormat(" customer_unit= '{0}' , ", item.customer_unit);
                        strSql.AppendFormat(" use_unit= '{0}' , ", item.use_unit);
                        strSql.AppendFormat(" vehicle_use= '{0}' , ", vehicle_use);
                        strSql.AppendFormat(" operating_line= '{0}' , ", item.operating_line);
                        strSql.AppendFormat(" point_departure= '{0}' , ", item.point_departure);
                        strSql.AppendFormat(" cont_name= '{0}' , ", cont_id);
                        strSql.AppendFormat(" cont_phone= '{0}' , ", item.cont_phone);
                        strSql.AppendFormat(" place_arrival= '{0}' , ", item.place_arrival);
                        if (!string.IsNullOrEmpty(item.warranty_period))
                        {
                            strSql.AppendFormat(" warranty_period= '{0}' , ", item.warranty_period);
                        }
                        if (!string.IsNullOrEmpty(item.warranty_mileage))
                        {
                            strSql.AppendFormat(" warranty_mileage= {0} , ", item.warranty_mileage);
                        }
                        strSql.AppendFormat(" status='{0}',", item.status == "0" ? "1" : "0");
                        strSql.AppendFormat(" enable_flag= '{0}' , ", (int)DataSources.EnumEnableFlag.USING);
                        strSql.AppendFormat(" update_time= {0} , ", nowTicks);
                        strSql.AppendFormat(" update_by= '{0}'  ", GlobalStaticObj_Server.Instance.UserID);
                        strSql.AppendFormat(" where turner='{0}'  ", item.turner);
                        sysSQLString.sqlString = strSql.ToString();
                        list.Add(sysSQLString);
                        #endregion
                    }
                    else
                    {
                        #region 插入语句
                        v_id = Guid.NewGuid().ToString();
                        //strSql.Append("insert into tb_vehicle(");
                        //strSql.Append("v_id,data_source,license_plate,v_brand,vin,v_model,carbuy_date,engine_num,turner,customer_unit,use_unit,vehicle_use,operating_line,point_departure,cont_name,cont_phone,place_arrival,warranty_period,warranty_mileage,enable_flag,create_by,create_time");
                        //strSql.Append(") values (");
                        //strSql.AppendFormat("'{0}',", v_id);
                        //strSql.AppendFormat("'{0}',", (int)DataSources.EnumDataSources.YUTONG);
                        //strSql.AppendFormat("'{0}',", item.license_plate);
                        //strSql.AppendFormat("'{0}',", item.v_brand);
                        //strSql.AppendFormat("'{0}',", item.vin);
                        //strSql.AppendFormat("'{0}',", item.v_model);
                        //strSql.AppendFormat("'{0}',", item.carbuy_date);
                        //strSql.AppendFormat("'{0}',", item.engine_num);
                        //strSql.AppendFormat("'{0}',", item.turner);
                        //strSql.AppendFormat("'{0}',", item.customer_unit);
                        //strSql.AppendFormat("'{0}',", item.use_unit);
                        //strSql.AppendFormat("'{0}',", vehicle_use);
                        //strSql.AppendFormat("'{0}',", item.operating_line);
                        //strSql.AppendFormat("'{0}',", item.point_departure);
                        //strSql.AppendFormat("'{0}',", item.cont_name);
                        //strSql.AppendFormat("'{0}',", item.cont_phone);
                        //strSql.AppendFormat("'{0}',", item.place_arrival);
                        //strSql.AppendFormat("'{0}',", item.warranty_period);
                        //strSql.AppendFormat("'{0}',", item.warranty_mileage);
                        //strSql.AppendFormat("'{0}',", (int)DataSources.EnumEnableFlag.USING);
                        //strSql.AppendFormat("'{0}',", GlobalStaticObj_Server.Instance.ClientID);
                        //strSql.AppendFormat("{0})", nowTicks);
                        DataRow dr = dt.NewRow();
                        dr["v_id"] = v_id;
                        dr["data_source"] = ((int)DataSources.EnumDataSources.YUTONG).ToString();
                        dr["license_plate"] = item.license_plate;
                        dr["v_brand"] = brand_id;
                        dr["vin"] = item.vin;
                        dr["v_model"] = models_id;
                        if (!string.IsNullOrEmpty(dtCarBuyDate))
                        {
                            dr["carbuy_date"] = dtCarBuyDate;
                        }
                        dr["engine_num"] = item.engine_num;
                        dr["turner"] = item.turner;
                        dr["customer_unit"] = item.customer_unit;
                        dr["use_unit"] = item.use_unit;
                        dr["vehicle_use"] = vehicle_use;
                        dr["operating_line"] = item.operating_line;
                        dr["point_departure"] = item.point_departure;
                        dr["cont_name"] = cont_id;
                        dr["cont_phone"] = item.cont_phone;
                        dr["place_arrival"] = item.place_arrival;
                        if (!string.IsNullOrEmpty(item.warranty_period))
                        {
                            dr["warranty_period"] = item.warranty_period;
                        }
                        if (!string.IsNullOrEmpty(item.warranty_mileage))
                        {
                            dr["warranty_mileage"] = item.warranty_mileage;
                        }
                        dr["status"] = item.status == "0" ? "1" : "0";
                        dr["enable_flag"] = ((int)DataSources.EnumEnableFlag.USING).ToString();
                        dr["create_by"] = GlobalStaticObj_Server.Instance.UserID;
                        dr["create_time"] = nowTicks;
                        //dt.Rows.Add(dr);
                        listTbVehicle.Add(dr);
                        #endregion
                    }
                    #region 车辆司机信息处理 tr_driver_vehicle,tb_driver
                    string driver_id = null;
                    string driver_name = string.Empty;
                    DataRow[] drsDriver = dtDriver.Select("v_id='" + v_id + "'");
                    if (drsDriver.Count() > 0)
                    {
                        driver_id = drsDriver[0]["driver_id"].ToString();
                    }
                    DataRow[] drsDriverName = dtContacts.Select(string.Format("cont_crm_guid='{0}'", item.driver_name));
                    if (drsDriverName.Count() > 0)
                    {
                        driver_name = drsDriverName[0]["cont_name"].ToString();
                    }
                    if (!string.IsNullOrEmpty(driver_id))
                    {
                        #region 更新车辆司机信息
                        SysSQLString sysSQLString = new SysSQLString();
                        sysSQLString.cmdType = CommandType.Text;
                        //if (item.driver_name.Length > 15)
                        //{
                        //    file = "driver_name";
                        //}
                        //if (item.driver_phone.Length > 15)
                        //{
                        //    file = "driver_phone";
                        //}
                        sysSQLString.sqlString = string.Format(" update tb_driver set driver_name='{0}',driver_phone='{1}',update_by='{2}',update_time={3} where driver_id='{4}'",
                            driver_name, item.driver_phone, GlobalStaticObj_Server.Instance.UserID, nowTicks, driver_id);
                        sysSQLString.Param = new Dictionary<string, string>();
                        list.Add(sysSQLString);
                        #endregion
                    }
                    else
                    {
                        #region 插入车辆司机信息
                        driver_id = Guid.NewGuid().ToString();
                        //                        sysSQLString = new SysSQLString();
                        //                        sysSQLString.cmdType = CommandType.Text;
                        //                        sysSQLString.sqlString = string.Format(@"insert into tb_driver(driver_id,driver_name,driver_phone,enable_flag,create_by,create_time) 
                        //                                values('{0}','{1}','{2}','{3}','{4}',{5})",
                        //                                driver_id, item.driver_name, item.driver_phone, (int)DataSources.EnumEnableFlag.USING, GlobalStaticObj_Server.Instance.ClientID, nowTicks);
                        //                        sysSQLString.Param = new Dictionary<string, string>();

                        //list.Add(sysSQLString);
                        DataRow drDriver = dtTbDriver.NewRow();
                        drDriver["driver_id"] = driver_id;
                        drDriver["driver_name"] = driver_name;
                        drDriver["driver_phone"] = item.driver_phone;
                        drDriver["enable_flag"] = ((int)DataSources.EnumEnableFlag.USING).ToString();
                        drDriver["create_by"] = GlobalStaticObj_Server.Instance.UserID;
                        drDriver["create_time"] = nowTicks;
                        //dtTbDriver.Rows.Add(drDriver);
                        listTbDriver.Add(drDriver);
                        #endregion

                        #region 插入车辆司机关系表
                        string dir_v_id = Guid.NewGuid().ToString();
                        //sysSQLString = new SysSQLString();
                        //sysSQLString.cmdType = CommandType.Text;
                        //sysSQLString.sqlString = string.Format("insert into tr_driver_vehicle(dir_v_id,v_id,driver_id) values('{0}','{1}','{2}')",
                        //    dir_v_id, v_id, driver_id);
                        //sysSQLString.Param = new Dictionary<string, string>();
                        //list.Add(sysSQLString);
                        DataRow drTr = dtTrDriver.NewRow();
                        drTr["dir_v_id"] = dir_v_id;
                        drTr["v_id"] = v_id;
                        drTr["driver_id"] = driver_id;
                        //dtTrDriver.Rows.Add(drTr);
                        listTrDriver.Add(drTr);
                        #endregion
                    }
                    #endregion
                    busArr[index] = null;//释放项
                }
                //flag = DBHelper.BatchExeSQLStringMultiByTrans("宇通:同步车辆信息", list);
                //flag = DBHelper.BatchExeSQLStringMultiByTrans("tb_vehicle", listTbVehicle);
                flag = DBHelper.SqlBulkByTransNoLogNoBackUp("同步车辆信息", GlobalStaticObj_Server.Instance.MainAccCode, "tb_vehicle", listTbVehicle);
                if (!flag)
                {
                    break;
                }
                //flag = DBHelper.BatchExeSQLStringMultiByTrans("tb_driver", listTbDriver);
                flag = DBHelper.SqlBulkByTransNoLogNoBackUp("同步司机", GlobalStaticObj_Server.Instance.MainAccCode, "tb_driver", listTbDriver);
                if (!flag)
                {
                    break;
                }
                //flag = DBHelper.BatchExeSQLStringMultiByTrans("tr_driver_vehicle", listTrDriver);
                flag = DBHelper.SqlBulkByTransNoLogNoBackUp("", GlobalStaticObj_Server.Instance.MainAccCode, "tr_driver_vehicle", listTrDriver);
                if (!flag)
                {
                    break;
                }
                if (list.Count > 0)
                {
                    flag = DBHelper.BatchExeSQLStrMultiByTransNoLogNoBackup("", GlobalStaticObj_Server.Instance.MainAccCode, list);
                    if (!flag)
                    {
                        break;
                    }
                }
            }
            SysConfig sysConfig = new SysConfig();
            sysConfig.UpdateLastTime("BusLastTime");
            updateCount += busArr.Count();
            #region 释放资源
            dic = null;
            //车辆
            dtVehicle = null;
            //车辆司机
            dtDriver = null;
            dtContacts = null;
            //品牌
            dtBrand = null;
            //车型
            dtVehicleModels = null;
            #endregion
            DateTime endDate = DateTime.Now;
            TimeSpan span = endDate - startDate;
            return flag;
        }
コード例 #31
0
        /// <summary> 保存车辆信息
        /// </summary>
        /// <param name="busArr">车辆信息</param>
        /// <returns>True OR False</returns>
        private static bool SaveBus(QueryBus.Detail[] busArr)
        {
            string nowTicks = Common.LocalDateTimeToUtcLong(GlobalStaticObj_Server.Instance.CurrentDateTime).ToString();
            List<SysSQLString> list = new List<SysSQLString>();
            foreach (QueryBus.Detail item in busArr)
            {
                string v_id = DBHelper.GetSingleValue("获取车辆信息车辆ID", GlobalStaticObj_Server.DbPrefix + GlobalStaticObj_Server.Instance.MainAccCode, "tb_vehicle", "v_id", "turner='" + item.turner + "'", "");
                SysSQLString sysSQLString = new SysSQLString();
                sysSQLString.cmdType = CommandType.Text;
                sysSQLString.Param = new Dictionary<string, string>();
                StringBuilder strSql = new StringBuilder();
                if (!string.IsNullOrEmpty(v_id))
                {
                    #region 更新语句
                    strSql.Append("update tb_vehicle set ");
                    strSql.Append(" data_source= @data_source , ");
                    strSql.Append(" license_plate= @license_plate , ");
                    strSql.Append(" v_brand= @v_brand , ");
                    strSql.Append(" vin= @vin , ");
                    strSql.Append(" v_model= @v_model , ");
                    strSql.Append(" carbuy_date= @carbuy_date , ");
                    strSql.Append(" engine_num= @engine_num , ");
                    strSql.Append(" turner= @turner , ");
                    strSql.Append(" customer_unit= @customer_unit , ");
                    strSql.Append(" use_unit= @use_unit , ");
                    strSql.Append(" vehicle_use= @vehicle_use , ");
                    strSql.Append(" operating_line= @operating_line , ");
                    strSql.Append(" point_departure= @point_departure , ");
                    strSql.Append(" cont_name= @cont_name , ");
                    strSql.Append(" cont_phone= @cont_phone , ");
                    strSql.Append(" place_arrival= @place_arrival , ");
                    strSql.Append(" warranty_period= @warranty_period , ");
                    strSql.Append(" warranty_mileage= @warranty_mileage , ");
                    strSql.Append(" enable_flag= @enable_flag , ");
                    strSql.Append(" update_time= @update_time , ");
                    strSql.Append(" update_by= @update_by  ");
                    strSql.Append(" where turner=@turner  ");
                    #endregion
                }
                else
                {
                    #region 插入语句
                    strSql.Append("insert into tb_vehicle(");
                    strSql.Append("v_id,data_source,license_plate,v_brand,vin,v_model,carbuy_date,engine_num,turner,customer_unit,use_unit,vehicle_use,operating_line,point_departure,cont_name,cont_phone,place_arrival,warranty_period,warranty_mileage,enable_flag,update_time,create_by,create_time,update_by");
                    strSql.Append(") values (");
                    strSql.Append("@v_id,@data_source,@license_plate,@v_brand,@vin,@v_model,@carbuy_date,@engine_num,@turner,@customer_unit,@use_unit,@vehicle_use,@operating_line,@point_departure,@cont_name,@cont_phone,@place_arrival,@warranty_period,@warranty_mileage,@enable_flag,@update_time,@create_by,@create_time,@update_by) ");
                    #endregion
                    v_id = Guid.NewGuid().ToString();
                    sysSQLString.Param.Add("v_id", v_id);
                    sysSQLString.Param.Add("create_by", GlobalStaticObj_Server.Instance.UserID);
                    sysSQLString.Param.Add("create_time", nowTicks);
                }

                #region  参数项 20
                sysSQLString.Param.Add("data_source", ((int)DataSources.EnumDataSources.YUTONG).ToString());
                sysSQLString.Param.Add("license_plate", item.license_plate);
                sysSQLString.Param.Add("v_brand", item.v_brand);
                sysSQLString.Param.Add("vin", item.vin);
                sysSQLString.Param.Add("v_model", item.v_model);
                string dtCarBuyDate = "";
                //购买日期为空处理
                if (!String.IsNullOrEmpty(item.carbuy_date))
                {
                    dtCarBuyDate = Common.LocalDateTimeToUtcLong(Convert.ToDateTime(item.carbuy_date)).ToString();
                }
                sysSQLString.Param.Add("carbuy_date", dtCarBuyDate);
                sysSQLString.Param.Add("engine_num", item.engine_num);
                sysSQLString.Param.Add("turner", item.turner);
                sysSQLString.Param.Add("customer_unit", item.customer_unit);
                sysSQLString.Param.Add("use_unit", item.use_unit);
                sysSQLString.Param.Add("vehicle_use", WebServUtil.GetLocalDicID("vehicle_use", item.vehicle_use));
                sysSQLString.Param.Add("operating_line", item.operating_line);
                sysSQLString.Param.Add("point_departure", item.point_departure);
                sysSQLString.Param.Add("cont_name", item.cont_name);
                sysSQLString.Param.Add("cont_phone", item.cont_phone);
                sysSQLString.Param.Add("place_arrival", item.place_arrival);
                sysSQLString.Param.Add("warranty_period", item.warranty_period);
                sysSQLString.Param.Add("warranty_mileage", item.warranty_mileage);

                sysSQLString.Param.Add("enable_flag", ((int)DataSources.EnumEnableFlag.USING).ToString());
                sysSQLString.Param.Add("update_by", GlobalStaticObj_Server.Instance.UserID);
                sysSQLString.Param.Add("update_time", nowTicks);

                #endregion
                sysSQLString.sqlString = strSql.ToString();
                list.Add(sysSQLString);


                #region 车辆司机信息处理 tr_driver_vehicle,tb_driver
                string driver_id = DBHelper.GetSingleValue("获取车辆司机关系表中的司机ID", GlobalStaticObj_Server.DbPrefix + GlobalStaticObj_Server.Instance.MainAccCode, "tr_driver_vehicle", "driver_id", " v_id='" + v_id + "'", "");
                if (!string.IsNullOrEmpty(driver_id))
                {
                    #region 更新车辆司机信息
                    sysSQLString = new SysSQLString();
                    sysSQLString.cmdType = CommandType.Text;
                    sysSQLString.sqlString = " update tb_driver set driver_name=@driver_name,driver_phone=@driver_phone,update_by=@update_by,update_time=@update_time where driver_id=@driver_id";
                    sysSQLString.Param = new Dictionary<string, string>();
                    sysSQLString.Param.Add("driver_id", driver_id);
                    sysSQLString.Param.Add("driver_name", item.driver_name);
                    sysSQLString.Param.Add("driver_phone", item.driver_phone);
                    sysSQLString.Param.Add("update_by", GlobalStaticObj_Server.Instance.UserID);
                    sysSQLString.Param.Add("update_time", nowTicks);
                    list.Add(sysSQLString);
                    #endregion
                }
                else
                {
                    #region 插入车辆司机信息
                    driver_id = Guid.NewGuid().ToString();
                    sysSQLString = new SysSQLString();
                    sysSQLString.cmdType = CommandType.Text;
                    sysSQLString.sqlString = "insert into tb_driver(driver_id,driver_name,driver_phone,enable_flag,create_by,create_time,update_by,update_time) values(@driver_id,@driver_name,@driver_phone,@enable_flag,@create_by,@create_time,@update_by,@update_time)";
                    sysSQLString.Param = new Dictionary<string, string>();
                    sysSQLString.Param.Add("driver_id", driver_id);
                    sysSQLString.Param.Add("driver_name", item.driver_name);
                    sysSQLString.Param.Add("driver_phone", item.driver_phone);

                    sysSQLString.Param.Add("enable_flag", ((int)DataSources.EnumEnableFlag.USING).ToString());
                    sysSQLString.Param.Add("create_by", GlobalStaticObj_Server.Instance.UserID);
                    sysSQLString.Param.Add("create_time", nowTicks);
                    sysSQLString.Param.Add("update_by", GlobalStaticObj_Server.Instance.UserID);
                    sysSQLString.Param.Add("update_time", nowTicks);

                    list.Add(sysSQLString);
                    #endregion

                    #region 插入车辆司机关系表
                    string dir_v_id = Guid.NewGuid().ToString();
                    sysSQLString = new SysSQLString();
                    sysSQLString.cmdType = CommandType.Text;
                    sysSQLString.sqlString = "insert into tr_driver_vehicle(dir_v_id,v_id,driver_id) values(@dir_v_id,@v_id,@driver_id)";
                    sysSQLString.Param = new Dictionary<string, string>();
                    sysSQLString.Param.Add("dir_v_id", dir_v_id);
                    sysSQLString.Param.Add("v_id", v_id);
                    sysSQLString.Param.Add("driver_id", driver_id);
                    list.Add(sysSQLString);
                    #endregion
                }
                #endregion
            }
            bool flag = DBHelper.BatchExeSQLStringMultiByTrans("宇通:同步车辆信息", GlobalStaticObj_Server.DbPrefix + GlobalStaticObj_Server.Instance.MainAccCode, list);
            return flag;
        }
コード例 #32
0
 public AuctionItemsController(CommandBus commandBus, QueryBus queryBus)
 {
     _commandBus = commandBus;
     _queryBus   = queryBus;
 }
コード例 #33
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            services.AddTransient <ITextSerializer, JsonTextSerializer>();

            services.AddTransient <Func <ITextSerializer> >(container =>
                                                            container.GetService <ITextSerializer>);
            services.AddTransient(typeof(IAsyncRepository <>), typeof(AsyncRepository <>));
            services.AddScoped(typeof(IAggregateRepositoryService <>), typeof(AggregateRepositoryService <>));

            //Command
            services.AddScoped <ICommandHandler <AddItemToBasketCommand>, AddItemToBasketHandler>();
            services.AddScoped <ICommandHandler <CreateBasketForUserCommand>, CreateBasketForUserCommandHandler>();
            services.AddScoped <ICommandHandler <CreatePurchaseOrderCommand>, CreatePurchaseOrderCommandHandler>();
            services.AddScoped <ICommandHandler <ProcessPurchaseOrderCommand>, ProcessPurchaseOrderCommandHandler>();

            services.AddScoped <ICommandBus>(container =>
            {
                var commandBus = new CommandBus();
                commandBus.SubscribeAsync(container.GetService <ICommandHandler <CreateBasketForUserCommand> >()).Wait();
                commandBus.SubscribeAsync(container.GetService <ICommandHandler <AddItemToBasketCommand> >()).Wait();
                commandBus.SubscribeAsync(container.GetService <ICommandHandler <CreatePurchaseOrderCommand> >()).Wait();
                commandBus.SubscribeAsync(container.GetService <ICommandHandler <ProcessPurchaseOrderCommand> >()).Wait();
                return(commandBus);
            });

            //Event
            services.AddScoped <IEventHandler <BasketCreatedEvent>, BasketViewModelGenerator>();
            services.AddScoped <IEventHandler <ItemAddedToBasketEvent>, BasketItemAddedViewModelGenerator>();
            services.AddScoped <IEventHandler <ProductPurchasedEvent>, ShippingInvoiceViewModelGenerator>();
            services.AddScoped <IEventHandler <SubscriptionItemPurchasedEvent>, SubscriptionItemPurchasedEventHandler>();
            services.AddScoped <IEventBus>(container =>
            {
                var eventBus = new EventBus();
                eventBus.SubscribeAsync(container.GetService <IEventHandler <BasketCreatedEvent> >()).Wait();
                eventBus.SubscribeAsync(container.GetService <IEventHandler <ItemAddedToBasketEvent> >()).Wait();
                eventBus.SubscribeAsync(container.GetService <IEventHandler <ProductPurchasedEvent> >()).Wait();
                eventBus.SubscribeAsync(container.GetService <IEventHandler <SubscriptionItemPurchasedEvent> >()).Wait();
                return(eventBus);
            });

            //Query
            services.AddScoped <IQueryHandler <GetAllBuyers,
                                               IReadOnlyList <Buyer> >, GetAllBuyersQueryHandler>();
            services.AddScoped <IQueryHandler <GetBasketByBuyerId,
                                               ApplicationCore.Basket.Query.ViewModel.Basket>, BasketQueryHandlers>();
            services.AddScoped <IQueryHandler <ShippingInvoiceQuery, ShippingInvoice>, GetShippingInvoiceQueryHandler>();
            services.AddScoped <BasketQueryHandlers>();
            services.AddScoped <IQueryBus>(container =>
            {
                var queryBus = new QueryBus();
                queryBus.SubscribeAsync(container.GetService <IQueryHandler <GetBasketByBuyerId,
                                                                             ApplicationCore.Basket.Query.ViewModel.Basket> >()).Wait();
                queryBus.SubscribeAsync(container.GetService <IQueryHandler <GetAllBuyers,
                                                                             IReadOnlyList <Buyer> > >()).Wait();
                queryBus.SubscribeAsync(container.GetService <IQueryHandler <ShippingInvoiceQuery,
                                                                             ShippingInvoice> >()).Wait();
                return(queryBus);
            });

            //logger
            services.AddScoped(typeof(IAppLogger <>), typeof(LoggerAdapter <>));

            var config = new MapperConfiguration(cfg =>
            {
                cfg.CreateMissingTypeMaps = true;
                cfg.AddProfile(new AutoMappingConfiguration());
            });
            var mapper = config.CreateMapper();

            services.AddSingleton(mapper);
        }