private void Init() { if (_initialized) { return; } lock (Locker) { if (_initialized) { return; } _acDomain.MessageDispatcher.DispatchMessage(new MemorySetInitingEvent(this)); _dsdSetDic.Clear(); _dsdRoleBySet.Clear(); _dsdRoleById.Clear(); var stateReder = _acDomain.RetrieveRequiredService <IOriginalHostStateReader>(); var dsdSets = stateReder.GetAllDsdSets(); foreach (var dsdSet in dsdSets) { if (!_dsdSetDic.ContainsKey(dsdSet.Id)) { _dsdSetDic.Add(dsdSet.Id, DsdSetState.Create(dsdSet)); } } var dsdRoles = stateReder.GetAllDsdRoles(); foreach (var dsdRole in dsdRoles) { DsdSetState dsdSetState; if (_dsdSetDic.TryGetValue(dsdRole.DsdSetId, out dsdSetState)) { var state = DsdRoleState.Create(dsdRole); if (!_dsdRoleById.ContainsKey(dsdRole.Id)) { _dsdRoleById.Add(dsdRole.Id, state); } if (!_dsdRoleBySet.ContainsKey(dsdSetState)) { _dsdRoleBySet.Add(dsdSetState, new List <DsdRoleState>()); } _dsdRoleBySet[dsdSetState].Add(state); } else { // TODO:删除非法的记录 } } _initialized = true; _acDomain.MessageDispatcher.DispatchMessage(new MemorySetInitializedEvent(this)); } }
private void Handle(IAcSession acSession, IDsdRoleCreateIo input, bool isCommand) { var acDomain = _set._acDomain; var dsdRoleBySet = _set._dsdRoleBySet; var dsdRoleById = _set._dsdRoleById; var dsdRoleRepository = acDomain.RetrieveRequiredService <IRepository <DsdRole> >(); if (!input.Id.HasValue) { throw new ValidationException("标识是必须的"); } if (dsdRoleById.Any(a => a.Key == input.Id.Value || (a.Value.RoleId == input.RoleId && a.Value.DsdSetId == input.DsdSetId))) { throw new ValidationException("重复的记录"); } DsdSetState dsdSet; if (!acDomain.DsdSetSet.TryGetDsdSet(input.DsdSetId, out dsdSet)) { throw new ValidationException("意外的动态责任分离角色集标识" + input.DsdSetId); } var entity = DsdRole.Create(input); lock (Locker) { if (dsdRoleById.Any(a => a.Key == input.Id.Value || (a.Value.RoleId == input.RoleId && a.Value.DsdSetId == input.DsdSetId))) { throw new ValidationException("重复的记录"); } if (!acDomain.DsdSetSet.TryGetDsdSet(input.DsdSetId, out dsdSet)) { throw new ValidationException("意外的动态责任分离角色集标识" + input.DsdSetId); } var state = DsdRoleState.Create(entity); if (!dsdRoleById.ContainsKey(entity.Id)) { dsdRoleById.Add(entity.Id, state); } if (!dsdRoleBySet.ContainsKey(dsdSet)) { dsdRoleBySet.Add(dsdSet, new List <DsdRoleState>()); } dsdRoleBySet[dsdSet].Add(state); if (isCommand) { try { dsdRoleRepository.Add(entity); dsdRoleRepository.Context.Commit(); } catch { if (dsdRoleById.ContainsKey(entity.Id)) { dsdRoleById.Remove(entity.Id); } dsdRoleBySet[dsdSet].Remove(state); dsdRoleRepository.Context.Rollback(); throw; } } } if (isCommand) { acDomain.MessageDispatcher.DispatchMessage(new DsdRoleAddedEvent(acSession, entity, input, isPrivate: true)); } }