免責事項:私はまだ Swift を学んでいるので、Swift の特定の概念/機能/制限を理解していない場合はご容赦ください。
Swinject フレームワークでは、プロトコルをクラスにバインドする場合、次のようなクロージャーでクラス インスタンスを返す必要があるようです。
container.register(Animal.self) { _ in Cat() }
代わりに 2 つの型をメソッドに渡しregister()
、フレームワークにクラスをインスタンス化させることは可能ですか? もちろん、そのクラスに初期化子の依存関係があるかどうかを再帰的に確認する必要があります(制御の反転)。
これは PHP の世界で可能です。リフレクションの概念があるためです。これにより、依存関係のクラス タイプを取得して、その場でインスタンス化することができます。Swiftにこの機能があるのだろうか?
これを書く方がはるかに良いでしょう:
container.register(Animal.self, Cat.self)
これにより、コンテナーから任意のクラスを解決し、その依存関係も解決することができます (手動でクラスを登録する必要はありません)。
container.resolve(NotRegisteredClass.self)
注:これは、依存関係としてスカラー型をとらないクラスに対してのみ意味があります (もちろん明示的に指定する必要があるため)。