private IProp GenerateProp(IDropTableRecordSubScheme record) { try { var scheme = _schemeService.GetScheme <IPropScheme>(record.SchemeSid); var propClass = GetPropClass(scheme); switch (propClass) { case PropClass.Equipment: var equipment = _propFactory.CreateEquipment(scheme); return(equipment); case PropClass.Resource: var rolledCount = _randomSource.RollResourceCount(record.MinCount, record.MaxCount); var resource = _propFactory.CreateResource(scheme, rolledCount); return(resource); case PropClass.Concept: var propScheme = _schemeService.GetScheme <IPropScheme>("record.Concept"); return(new Concept(scheme, propScheme)); default: throw new ArgumentException($"Неизвестный класс {propClass} объекта {scheme}."); } } catch (Exception exception) { //TODO Оборачивать в доменное исключение. Создать собственный тип. throw new Exception($"Ошибка при обработке записи дропа {record.SchemeSid}", exception); } }
private IProp GenerateProp(IDropTableRecordSubScheme record) { var scheme = _schemeService.GetScheme <IPropScheme>(record.SchemeSid); var propClass = GetPropClass(scheme); switch (propClass) { case PropClass.Equipment: var equipment = _propFactory.CreateEquipment(scheme); return(equipment); case PropClass.Resource: var rolledCount = _randomSource.RollResourceCount(record.MinCount, record.MaxCount); var resource = _propFactory.CreateResource(scheme, rolledCount); return(resource); case PropClass.Concept: throw new ArgumentException($"Пока концепты не поддерживаются."); var propScheme = _schemeService.GetScheme <IPropScheme>("record.Concept"); return(new Concept(scheme, propScheme)); default: throw new ArgumentException($"Неизвестный класс {propClass} объекта {scheme}."); } }