iOS 上の Swift 5.x 用の超軽量の依存関係注入/サービス ロケーター フレームワーク。
注: リゾルバーは現在正式に非推奨となり、私の新しい依存関係注入システムである Factory に置き換えられました。 Factory は、コンパイル時に安全であり、Resolver よりも小型、軽量、高速な真のコンテナベースの依存関係注入システムです。 Resolver も優れていますが、Factory の方が優れています。
依存関係注入フレームワークは、制御の反転設計パターンをサポートします。技術的な定義はさておき、依存関係の注入は次のように要約できます。
|オブジェクトがその仕事をするために必要なものを与えること。
それでおしまい。依存関係の注入により、疎結合のコードを作成できるため、再利用、モック、テストが容易になります。
詳細については、「依存関係の挿入の優しい紹介」を参照してください。
古典的な依存関係注入戦略は 6 つあります。
リゾルバーはそれらすべてをサポートします。リンクをクリックすると、それぞれの簡単な説明、例、長所と短所が表示されます。
注釈について言えば、リゾルバーは、Swift 5.1 の新しいプロパティ ラッパー構文を使用したサービスの解決をサポートするようになりました。
class BasicInjectedViewController : UIViewController {
@ Injected var service : XYZService
@ LazyInjected var service2 : XYZLazyService
@ WeakLazyInjected var service3 : XYZAnotherLazyService ?
}
Injected キーワードを追加するだけで、依存関係が自動的に解決されます。この戦略およびその他の戦略の詳細については、アノテーションのドキュメントを参照してください。
SwiftUI ビューに Observable Object を挿入できる@InjectedObject
ラッパーもあります。
リゾルバーは 1 つのファイル内の 700 行強の実際のコードで実装されていますが、その 700 行に大量の機能が詰め込まれています。
TLDR: 少なくとも、自動型推論、スコープ、オプションについては必ず読んでください。
リゾルバーの使用は、次の 3 つのステップからなる簡単なプロセスです。
前述したように、Resolver は超軽量の依存性注入システムであり、700 行強のコードで実装され、単一のファイルに含まれています。
リゾルバーはパフォーマンスも重視して設計されています。たとえば、SwinjectStoryboard は優れた依存関係注入システムですが、Resolver は依存関係チェーンの解決において Swinject よりも約 800% 高速に動作します。
また、他のシステムとは異なり、リゾルバーは 100% Swift 5 で書かれており、Objective-C コード、メソッドの入れ替え、Objective-C ランタイムへの内部依存関係はありません。
さらに、リゾルバー:
最後に、自動型推論を使用すると、リゾルバーを使用して作成する依存関係注入コードの記述量が約 40 ~ 60% 少なくなる傾向があります。
リゾルバーは CocoaPods と Swift Package Manager をサポートします。
pod " Resolver "
リゾルバー自体は単一のソース ファイル (Resolver.swift) であるため、ファイルをダウンロードしてプロジェクトに追加することも簡単です。
Resolver (1.4) の現在のバージョンは Swift 5.3 をサポートしており、このリリースで現在サポートされている iOS の最小バージョンは iOS 11 であることに注意してください。
以前のバージョンのサポートについては、インストール ガイドをお読みください。
Builder リポジトリを公開しました。これは、次の例が含まれるシンプルなマスター/詳細スタイルの iOS アプリケーションです。
また、SwiftUI スタイルのビルダー パターンを使用してユーザー インターフェイス構造を構築し、ネットワーク リクエストを構築する新しいコードを試すためにも使用します。それをチェックしてください。
リゾルバーの最近の更新により、コード ベースに重大な変更が生じる可能性があります。
リゾルバー 1.4 では、スレッドの安全性とパフォーマンスが向上しました。重大な変更はありませんが、リゾルバーのスコープに直接アクセスすることは非推奨になりました。 「スコープ」を参照してください。
リゾルバー 1.3 では、リゾルバーに名前空間が追加されます。名前を登録すると、オートコンプリートが向上し、潜在的な実行時評価エラーが減ってコードの安全性が高まります。これは破壊的変更となる可能性があります。参照: 名前付きインスタンス
リゾルバー 1.2 では、単一引数と複数引数の両方の受け渡しと処理のサポートを強化するために、引数が登録ファクトリーに渡される方法が変更されました。これは重大な変更です。参照: 複数の引数の受け渡しと処理
リゾルバー 1.5 では、リゾルバー内で使用される登録およびキャッシュ メカニズムのいくつかが更新されました。これは、リゾルバーの内部動作に依存するものを作成しない限り、おそらく問題にはなりません。
Factory と Resolver に関する私の取り組みをサポートしたい場合は、GitHub スポンサーシップを検討してください。サポートを強化したり、メンターシップや企業トレーニングを提供したりするために、多くのレベルが存在します。
または、コーヒーを一杯買ってきてください。
Resolver は、リード iOS ソフトウェア エンジニアであり、Medium のトップ 1,000 テクノロジー ライターでもある Michael Long によって設計、実装、文書化、保守されています。
Michael は、Resolver での取り組みが評価され、2021 年の Google の Open Source Peer Reward 受賞者の 1 人でもありました。
リゾルバーは MIT ライセンスに基づいて利用できます。詳細については、LICENSE ファイルを参照してください。