public static IDisposable Monitor(this IPackageManager manager, PackageChanged add  = null, PackageChanged remove = null, PackageUpdated update = null)
 {
     if (add != null) manager.PackageAdded += add;
     if (remove != null) manager.PackageRemoved += remove;
     if (update != null) manager.PackageUpdated += update;
     return new ActionOnDispose(() =>
     {
         if (add != null) manager.PackageAdded -= add;
         if (remove != null) manager.PackageRemoved -= remove;
         if (update != null) manager.PackageUpdated -= update;
     });
 }