Comment Dispose un HttpResponseMessage (et gérer l'erreur CA2000 de FxCop)

icon Tags de l'article : ,

Mars 29, 2018
Yo,

Petit souci sur lequel je suis tombé aujourd'hui : j'utilisais un using autour de mon HttpResponseMessage :

using(var response = new HttpResponseMessage(HttpStatusCode.OK);
{
     //...
     return response;
}

Evidemment... ça ne marchait pas. Le Dispose était fait avant que la requête ne parte chez l'utilisateur, et donc... ben j'essayais d'accéder à un objet disposed.

Sauf que si je retire mon using, j'ai une magnifique erreur FxCop CA2000 qui apparait...

Du coup comment faire ?

Après quelques recherches, j'ai trouvé plusieurs informations intéressantes :
  • Ce n'est, évidemment, pas obligatoire de dispose le HttpResponseMessage dans le cas où tout se passe bien. La requête sera dispose, et par conséquent l'objet HttpResponseMessage également. Le GarbageCollector est de plus là pour les restes ;)
  • Si jamais on veut planifier le Dispose pour s'assurer qu'il soit fait (sans attendre le GC), alors on peut utiliser Request.RegisterForDispose(response);
  • Dans tous les cas, l'erreur CA2000 apparaitra car dans le cas d'une exception, ben... notre HttpResponseMessage ne sera pas disposed.

Ce warning FxCop est un peu inutile quand on manipule des HttpResponseMessage dans un contexte de requêtes d'API.
Ce warning est là, normalement, pour forcer à utiliser des usings, mais là... on est dans une situation où un using ne marche pas, donc inadapté.

Ma suggestion ?
Désactiver l'erreur CA2000 pour cette méthode.

Et si vraiment vous ne pouvez/voulez pas... Vous pouvez toujours vous assurer qu'un Dispose sera fait, comme ceci :

var response = new HttpResponseMessage(HttpStatusCode.OK);
try
{
     Request.RegisterForDispose(response);
     //...
     return response;
}
catch
{
     response.Dispose();
     
     throw;
}

Bon dev et bonne journée tout le monde !

Ranger les using "System" avant les autres, dans Visual Studio

icon Tags de l'article : , ,

Mars 27, 2018
Salut,

Si vous êtes comme moi, vous aimez bien faire les choses.

Or, en C#, on sait qu'il faut toujours mettre les using "System" avant les autres. C'est une bonne pratique, ça permet de s'y retrouver plus facilement, et de gagner en clarté/lisibilité.

Sauf que voilà, sans resharper... c'est chiant d'avoir à déplacer les using pour les trier automatiquement.

Sauf que voilà... y'a pas à le faire à la main.

Visual Studio le gère automatiquement aujourd'hui. Il faut juste l'activer.

Allez donc dans Tools => Settings, puis dans C# => Advanced.

Là, vous n'avez plus qu'à cocher la case "Place 'System' directives first when sorting usings".



Et c'est fait !

Bon dev et bonne journée tout le monde !

Installer Git Extensions et Git sur Windows pour cloner un repository GitHub

icon Tags de l'article : ,

Mars 26, 2018
Bonjour à tous,

Un petit article pour bien installer Git Extensions sur son PC, afin de pouvoir l’utiliser avec un repo git (ici, Github).

Tout d’abord, vous devez télécharger Git for Windows et l’installer en administrateur.

A noter que dans les options, je choisis :
  • Notepad++ au lieu de Vim par défaut
  • Use Git and optional Unix tools from the Windows Command Prompt
  • Use OpenSSH
  • Use the OpenSSL library
  • Checkout as-is, commit as-is (évite les conversions intempestives)
  • Use Min-TTY (mieux qu’une simple console windows)
  • Enable file system caching & Enable Git Credential Manager

Ensuite, téléchargez Git Extensions et installez-le :
  • Install for all users of this machine
  • Décochez la case pour installer Git for Windows
  • Cochez l’installation de KDiff3 que si vous n’avez pas de logiciel de diff/merge d’installé
  • PuTTY comme client SSH

Lancez-ensuite Git Extensions.
Par défaut, il doit vous ouvrir la fenêtre de configuration. Si ce n’est pas le cas, ouvrez là.
Dedans, cliquez sur chaque ligne rouge et configurez là pour qu’elle passe verte (username, git path, etc.)

Une fois ça fait, vous n’avez plus qu’à récupérer le chemin de votre repository à cloner, et à l’ajouter dans votre Git Extensions pour le cloner.

S’il s’agit d’un chemin BitBucket ou Github, pensez à ajouter dans l’url votre username avant le nom de domaine, comme ceci :
https://my_account_name_or_email@github.com/HowTommy/ mycryptochat.git

Ainsi, quand vous essaierez de cloner/push un repository, une popup s'ouvrira pour vérifier votre identité.

And voilà!

En espérant que ça vous soit utile !

Bon dev et bonne semaine à tous/toutes !

Refactoring : la règle des trois

icon Tags de l'article : ,

Mars 16, 2018
Salut tout le monde,

Aujourd'hui on va parler Refactoring.

Je pense que vous vous êtes déjà tou·tes retrouvé·es dans une situation où vous avez besoin de reprendre du code... mais ça vous obligerait à faire un copier coller.

Donc, en tant que bon·ne dev, vous vous dites : "hors de question, je vais refacto pour réutiliser cette méthode/vue ailleurs". Et vous vous lancez dans votre refacto.

Sauf que voilà. En général une refacto de ce type prendra au moins 3x le temps qu'il aurait fallu pour faire un copier/coller... Et rien ne vous assure qu'elle sera utile plus tard.

Ca se trouve, vous perdrez des heures à refacto du code qui ne sera jamais plus utilisé.

Face à cette interrogation, mes collègues m'ont fait découvrir une règle que je ne connaissais pas : la règle de trois.

Elle est très simple : quand vous avez besoin de réutiliser un morceau de code, faites un copier/coller. Si, en revanche, vous en avez à nouveau besoin plus tard, là vous pourrez vous lancer dans une refacto.

En résumé : on peut copier/coller du code, mais une seule fois. Au delà, il faut refacto notre code.

Cette "autorisation de copier/coller" peut permettre d'éviter de se lancer dans d'énormes refacto couteuses qui n'auront aucune utilité. Et le cout sera quasi-nul, car un simple copier/coller c'est souvent l'affaire de quelques minutes...

Bon dev à tou·tes !