Whenever an entity is being added to an entity controller (which is essentially just a bag of entities), I scan through it's components to figure out if I need to register additional entity processors (game systems). For instance, if I add an entity which has a SpriteComponent attached to it for the first time, the EntityController resolves the e.g. SpriteRenderSystem using a factory and a simple specification, which is then being registered within the controller.
Now I'd like to make it possible to figure out whether the component of an entity has changed. I was suggested in off-topic discussion elsewhere that I should use an eventing system to raise component change events in order to have the entity rescanned.
However this has two problems, I think:
The entity, which was a simple component bag beforehand, now holds a dependency to a event bus.
An event bus traditionally raises global fire-and-forget events. My entitiy controllers are the base of scenes (individual game states to activate/deactivate entities together) - and there can be many scenes active at once. When a component changed event fires, then I ask myself: In which entity controller is the affected entity? Scanning all controllers for whether they contain the entity sounds expensive.
Another option would simply make the entity aware of the entity controllers in order to signal "Hey, I have changed!". However should an entity know where it's currently attached to?