J'ai une petite question que j'espère avoir déjà posée. Dans le système sur lequel je travaille actuellement, nous avons déployé notre propre fournisseur pour gérer les exceptions Web. Une des choses que j'aime à propos de ce fournisseur est qu'il nous permet d'ajouter des valeurs de paramètres de la méthode qui lève l'exception. Le code ressemble à ceci.Utiliser la réflexion pour capturer les détails de l'erreur
Public Sub Dosomething(ByVal Parameter1 As String, ByVal Parameter2 As String)
Try
'Do some process that causes and error.
Catch ex As Exception
Dim ErrorDetails = New List(Of String)
ErrorDetails.Add("Parameter Values:")
ErrorDetails.Add(String.Format("Parameter 1: {0}", Parameter1))
ErrorDetails.Add(String.Format("Parameter 2: {0}", Parameter2))
RaiseNewCustomException(ex, ErrorDetails)
End Try
End Sub
Dans le cas de cette méthode, la capture des paramètres et leurs valeurs est très manuel et sujettes à l'erreur que de plus en plus de gens touchent la base de code et d'oublier de mettre à jour l'erreur lancée. Existe-t-il un moyen d'aborder ce problème de manière plus automatisée/moins sujette aux erreurs?
J'ai joué avec la réflexion, mais je ne pense pas que vous puissiez déterminer les valeurs des paramètres par réflexion. Je voudrais quelque chose comme:
Public Sub Dosomething(ByVal Parameter1 As String, ByVal Parameter2 As String)
Try
'Do some process that causes and error.
Catch ex As Exception
RaiseNewCustomExceptionAndAutomaticallyGenerateParameterErrorString(ex, System.Reflection.MethodInfo.GetCurrentMethod())
End Try
End Sub
J'ai déjà fait ce genre de chose auparavant. l'idée de ParamArray est géniale. Vous pouvez également faire quelque chose comme RaiseNewException (Ex, "Arg1", ValueofArg1, "Arg2", ValueofArg2), etc alors juste courir à travers le paramarray en utilisant les éléments 0,2,4 etc pour les noms de paramètres, et 1,3,5 etc. pour les valeurs. C'est toujours un mal de tête, mais c'est un peu mieux. Alternativement, un tisserand de code comme PostSharp peut faire ce genre de chose. – DarinH