C# Event handling for geometry add/modify/delete in Grasshopper

I have created a c# grasshopper plugin that reads through the grasshopper geometry and writes a report.

I would like to react to any changes in grasshopper (non baked) geometry in the current GH_Document, regardless of how that geometry is created/modified/deleted.

What is the best way to do that?

You can access each component’s outputs and check if the value is modified, saving it to some dictionary or something. I’m not familiar with C# in GH.

Another approach maybe is if you check if a component expires (updates). Usually a component is expired when an input is changed. That will trigger re-calculations, but you can’t know if the output value is changed as well.

I was pulled away from this project for awhile. Now I am back with the same question. If Ivelin’s suggestion is a good approach, how do I navigate the components and check for expiration?