Proxy注入を実装しました
BTKInjectorに今日いれた拡張(1.1.0)で、新たにproxyの注入に対応しました。cocoa pods登録済みです。
- (id) proxyForProtocol : (Protocol *)protocol;
何が便利なの?
BTKInjectorはオブジェクト生成時に依存関係を解決するため、循環参照があるとインスタンス注入が出来なくなります。Providerを注入することで初期化時には依存関係の解決を行わず、必要になってからgetすることは出来るのですが、正直書くのが面倒でした。
そして、今日思いついたのがProxy実装です。
Proxyオブジェクトは内部にproviderを注入してあり、必要に応じてproviderに処理を委譲します。ここで重要なのが、「必要になるまでproviderは呼ばれない」という点です。
これにより、インスタンスと同じプロトコルでそのまま使えて、Providerと同じように依存関係の解決を遅延することができます。さらば循環参照!
ちなみに、別記事で書いたDouble-Checked Lockingによる同期処理は、このproxy実行時にパフォーマンスが落ちないように検討したものです。
Where to find?
BTKInjector on github