Une librairie très complète de génération automatique de Notify Property Change

notifypropertyweaver – Notify Property Weaver – Google Project Hosting

Ce weaver permet:

  • de gérer les dépendances liées automatiquement ou par attribut,
  • de ne notifier qu’en cas de changement effectif dans le set en gérant  assez finement la comparaison,
  • de fonctionner avec le before/after en déclarant son propre OnPropertyChanged(string propertyName,object before,object after),
  • d’intercaller un interceptor en déclarant une méthode static void Intercept(object target,Action onPropertyChangedAction,string propertyName) dans une classse globale (fonctionne aussi en version before/after),
  • de ne pas introduire de dépendance à une assembly (en mode Attribute, la dépendance est soit enlevée par la phase de weaving, soit évitée par recopie des attibuts nécessaires).

Attention: L’insallation par NuGet détourne un peu le principe NuGet. Aucun répertoire Packages n’est généré au niveau de la solution et aucun packages.config n’est utilisé dans le répertoire de chaque projet. NuGet se contente de créer un répertoire Tools au niveau de la solution contenant NotifyPropertyWeaverMsBuildTask.dll. Cette assembly fourni une task MsBuild et encapsule tout ce qui lui est nécessaire (des morceaux de Microsoft.Cci et de Mono dont Cecil). Il modifie aussi les différents projets sélectionnés pour ajouter :

<UsingTask TaskName="NotifyPropertyWeaverMsBuildTask.WeavingTask" AssemblyFile="$(SolutionDir)Tools\NotifyPropertyWeaverMsBuildTask.dll" />
<Target Name="AfterCompile">
<NotifyPropertyWeaverMsBuildTask.WeavingTask />
</Target>

Cette modification est la seule trace “visible” de fait que notifypropertyweaver a été sélectionné pour ce projet. Un peu déroutant d’autant plus qu’il faut réinstaller notifypropertyweaver dans chaque projet (le répertoire Tools n’est pas dupliqué et reste unique au niveau de la solution).