一方、制御の反転を使うと、このプログラムは、汎用的な振舞いやグラフィック要素を持っているソフトウェアフレームワークを使って書かれることになるだろう。そうしたフレームワークには、たとえばウィンドウシステムや、メニュー、マウス制御などが既に組み込まれている。個別に開発するコードは、フレームワークの「空白部分を埋める」ものになる。たとえば、メニュー項目の一覧を与えるとか、それぞれのメニュー項目に対応するサブルーチンを登録するといったものだ。一方、ユーザの操作を監視していて、ユーザがメニュー項目を選択したときに、それに対応するサブルーチンを呼び出すのはフレームワークの側だ。メールクライアントの例で言えば、フレームワークはキーボードとマウスの両方の入力を追う事が出来ていて、いずれかの方法によりユーザがコマンドを実行した場合に、その命令を呼び出す。それと同時に、新着メッセージがないかどうかを見るためにネットワーク・インターフェイスも監視しており、何らかのネットワーク活動を検知した場合には画面を更新する。それと同じフレームワークが、表計算プログラムやテキストエディターの骨組にも利用できる。逆に、フレームワークは電子メールクライアントや、表計算や、テキストエディターについては何も知らない。それらの機能の実現には個別に実装されたコードを使っているからである。
制御の反転は以下のような設計目的のために使われる：
ハリウッドの原則.
背景.
制御の反転は依存性の注入と密接に関連している。依存性の注入は制御の反転を実現する有効な手法の一つである。
説明.
従来のプログラミングでは、ビジネスロジックのフロー制御は、互いに静的結合したオブジェクト群により決められる。制御の反転を使った場合、フロー制御はプログラム実行中に構築されたオブジェクト・グラフに依存して決まる。抽象化を媒介としてオブジェクト間の相互作用の関係を定義することによって、そのような動的なフロー制御が可能となっている。この実行時結合（遅延結合）は依存性の注入あるいはサービス・ロケータ・パターンのような仕組みにより実現される。但し、制御の反転を使う場合においても、コードを直接参照する代わりに外部の設定ファイルを読んで実行すべきコードを探す仕組みにするのであれば、コンパイル中にコードを静的に関連づけることはありうる。