示例#1
0
        // Business transaction
        public async Task RegisterNewGatewayWithControllerAsync(string controllerSerial, string gatewaySerial)
        {
            if (!this.externalService.IsGatewayProduced(gatewaySerial))
            {
                throw new InvalidOperationException("Gateway does not exist");
            }

            Gateway gateway = new Gateway()
            {
                Name   = "default installation",
                Serial = gatewaySerial
            };

            var controllerStatus = this.externalService.GetControllerStatus(controllerSerial);

            if (controllerStatus == ControllerStatus.Maintenance)
            {
                // perhaps invoke some additional action
                // e.g. send email to subscribed people.
            }

            var controller = new Controller()
            {
                Serial = controllerSerial,
                Status = controllerStatus
            };

            gateway.AddController(controller);
            gateway.Activate();

            await this.gatewayRepository.AddAsync(gateway);

            // What about transaction?
            await this.controllerRepository.AddAsync(controller);
        }
        // Business transaction
        public async Task RegisterNewGatewayWithControllerAsync(GatewayData gatewayData, ControllerData controllerData)
        {
            this.CheckConditions(gatewayData, controllerData);

            using (IUnitOfWork uow = new UnitOfWork())
            {
                var gatewayRepository        = uow.Factory.GetGatewayRepository();
                var controllerRepository     = uow.Factory.GetControllerRepository();
                var controllerTypeRepository = uow.Factory.GetControllerTypeRespository();

                Gateway gateway = new Gateway()
                {
                    Name    = gatewayData.Name,
                    Serial  = gatewayData.Serial,
                    Address = gatewayData.Address
                };

                var controller = await this.CreateControllerAsync(controllerData, controllerTypeRepository);

                gateway.AddController(controller);

                gateway.Activate();

                gatewayRepository.Add(gateway);

                controllerRepository.Add(controller);

                await uow.SaveAsync();
            }
        }
        // Business transaction
        public async Task RegisterNewGatewayWithControllerAsync(GatewayData gatewayData, ControllerData controllerData)
        {
            this.CheckConditions(gatewayData, controllerData);

            Gateway gateway = new Gateway()
            {
                Name    = gatewayData.Name,
                Serial  = gatewayData.Serial,
                Address = gatewayData.Address
            };

            var controller = await this.CreateControllerAsync(controllerData);

            gateway.AddController(controller);

            gateway.Activate();

            await this.gatewayRepository.AddAsync(gateway);

            // What about transaction?
            await this.controllerRepository.AddAsync(controller);
        }