You can use the framework in passive (on-demand) and active (callback-based) modes, that is, with passive and active APIs.
Most use-cases mix both passive and active modes, which allows developers to decide which features of the framework to use.
A passive mode example is when the application creates a new screen, and uses the Extensibility Framework to extend it. The application performs the task and the framework supports it in a passive mode.
An active mode example is when the framework builds a metadata-driven UI, and the application can replace or modify parts, or all of the default execution logic. The framework actively builds the screen, while the application supports it with its injected code parts. However, the application can always take over the entire process as well.