Interface BuilderはCocoaアプリの基本的な依存性注入に使用できますが、NIBファイルでオブジェクトをインスタンス化したくない場合のために、Objective-C/Cocoaのより完全な依存性注入フレームワークを知っている人はいますか?
編集
明確にするために、私はIBが基本的なDIに使用できることを認識していますが、GroovyまたはSpringsのラインに沿って、個別の本番構成およびテスト構成を含む、より完全な機能を備えたフレームワークを探しています。
Objective C、Ruby、LISPなどの遅延バインディング言語では必要ないことがわかると思います。針を作ろうとしたときに過度に複雑な道を進んでいたというジャミスの啓示のように、RubyのDIフレームワーク Net :: SSH再訪 。
Objective Cで同様のことを行うためのサンプルコードを提供できるリンクがいくつかあります。カテゴリを使用すると、基本的に実行時にクラスの動作を変更できます。 Mac開発者のためのヒント– Objective-C:カテゴリ および カテゴリに関するCocoa APIドキュメント を参照してください。基本的に、設定可能な「xを実行すること」を要求するための中心的な場所は必要ありません。TheThingThatDoesXを直接インスタンス化するだけで、他の動作を変更またはフックする必要がある場合は、カテゴリを使用できます。
異議 AtomicObjectによる。ギスをイメージして造形されています。
私は手足を出してこれについて話します。上位の回答で説明されている依存関係の注入は、それを使用しようとしている人が抱えている中心的な問題に対処していません。コンポーネントAがコンポーネントBを直接インスタンス化または参照しない開発手段が必要です。コンポーネントAはプロトコルによってコンポーネントBにバインドされ、コンポーネントAによってまったく参照されません。これにより、いつでもコンポーネントBを置き換えることができます接触要素A.私は反対票を投じましたが、あなたに同意する人は少ないようですので、あなたの参照を調査します。私は議論するつもりはありません、ただ学ぶことを探しています。 「それをする必要がないいいえ」のアプローチについてもっと理解したいと思います。
台風
ほぼ1年前、私はリリースしました: https://github.com/typhoon-framework/Typhoon
Typhoon-website は主要な機能をリストしています。簡単な要約:
非侵襲的。マクロやXMLは必要ありません。 強力なObjective-Cランタイムアプローチを使用します。
同じ基本クラスまたはプロトコルの複数の構成を簡単に作成できます。
魔法の文字列はありません-IDEリファクタリング、コード補完、コンパイル時のチェックをサポートしています。
ビューコントローラの挿入とストーリーボードの統合をサポートします。
イニシャライザとプロパティインジェクションの両方、およびライフサイクル管理をサポートします。
強力なメモリ管理機能。シングルトンのメモリオーバーヘッドなしで、事前設定されたオブジェクトを提供します。
循環依存関係の優れたサポート。
リーン。フットプリントが非常に小さいため、CPUとメモリに制約のあるデバイスに適しています。
バトルテスト済み-あらゆる種類のAppstore機能のアプリで使用
国際的に分散したコアチーム(StackOverflowも監視します)なので、質問へのサポートは決して遠くありません:)
APIドキュメントとサンプルアプリ
品質管理:
また、堅牢な品質管理システムを維持しています。
NIBファイルでオブジェクトをインスタンス化する必要はありません。ファイルの所有者をオブジェクトのクラスに設定し、それからビュー/ウィンドウ/何でもリンクする場合、nibファイルを手動でロードすることにより、実行時にオブジェクトを所有者として設定できます。これにより、依存関係が適切に注入されたオブジェクトの動的インスタンスを持つことができます。
ObjectivePimはどうですか? ObjectivePim
Objective-IOC での依存性注入の実装はどうですか?
私は非常にシンプルなDIコンテナーを作成しました。コードは GitHub にあります。つまり、基本的なことしかできません。オブジェクトの依存関係を発見し、他の与えられたオブジェクトを使用してそれらを満たします。実際のアプリケーションで使用できるようにするために、コードは非常にシンプルで、ハッキングするのが楽しいことがわかりました。