public void DeleteGeneric <T, TOut>(T value, bool isDeletedOnly = false, bool saveAttachedFile = true) where T : BaseEntityObject, new() where TOut : BaseEntity, new() { if (_casEnvironment.IdentityUser.UserType == UsetType.ReadOnly || _casEnvironment.IdentityUser.UserType == UsetType.SaveOnly) { return; } if (!typeof(TOut).IsSubclassOf(typeof(BaseEntity))) { throw new ArgumentException("T", "не является наследником " + typeof(BaseEntity).Name); } if (!typeof(T).IsSubclassOf(typeof(BaseEntityObject))) { throw new ArgumentException("TOut", "не является наследником " + typeof(BaseEntityObject).Name); } var method = GetMethod(typeof(T), "Convert"); if (isDeletedOnly) { value.IsDeleted = true; _apiProvider.Save(InvokeConverter <T, TOut>(value, method)); } else { _apiProvider.Delete(InvokeConverter <T, TOut>(value, method)); } if (value is IFileContainer && saveAttachedFile) { DeleteAttachedFile(value as IFileContainer); } if (value is IFileDTOContainer && saveAttachedFile) { DeleteAttachedFileDTO(value as IFileDTOContainer); } }