python dependency injector
1.0.0
Dependency Injector
とは何ですか? Dependency Injector
Python の依存関係注入フレームワークです。
これは、依存関係注入の原則の実装に役立ちます。
Dependency Injector
の主な機能:
Factory
、 Singleton
、 Callable
、 Coroutine
、 Object
、 List
、 Dict
、 Configuration
、 Resource
、 Dependency
、およびSelector
プロバイダーを提供します。 「プロバイダ」を参照してください。yaml
、 ini
、およびjson
ファイル、 pydantic
設定、環境変数、および辞書から構成を読み取ります。 「構成プロバイダー」を参照してください。mypy
に優しい入力スタブを提供します。 「タイピングと mypy」を参照してください。Cython
で書かれています。 from dependency_injector import containers , providers
from dependency_injector . wiring import Provide , inject
class Container ( containers . DeclarativeContainer ):
config = providers . Configuration ()
api_client = providers . Singleton (
ApiClient ,
api_key = config . api_key ,
timeout = config . timeout ,
)
service = providers . Factory (
Service ,
api_client = api_client ,
)
@ inject
def main ( service : Service = Provide [ Container . service ]) -> None :
...
if __name__ == "__main__" :
container = Container ()
container . config . api_key . from_env ( "API_KEY" , required = True )
container . config . timeout . from_env ( "TIMEOUT" , as_ = int , default = 5 )
container . wire ( modules = [ __name__ ])
main () # <-- dependency is injected automatically
with container . api_client . override ( mock . Mock ()):
main () # <-- overridden dependency is injected automatically
main()
関数を呼び出すと、 Service
依存関係が自動的にアセンブルされ、挿入されます。
テストを行うときは、 container.api_client.override()
メソッドを呼び出して、実際の API クライアントをモックに置き換えます。 main()
呼び出すと、モックが挿入されます。
任意のプロバイダーを別のプロバイダーでオーバーライドできます。
また、さまざまな環境に合わせてプロジェクトを再構成する場合にも役立ちます。つまり、API クライアントを開発またはステージ上のスタブに置き換えます。
Dependency Injector
使用すると、オブジェクトの組み立てがコンテナーに統合されます。依存関係の注入は明示的に定義されます。これにより、アプリケーションの動作の理解と変更が容易になります。
Python での依存関係の挿入と制御の反転について詳しくは、ドキュメントを参照してください。
パッケージは PyPi で入手できます。
pip install 依存関係インジェクター
ドキュメントはここから入手できます。
次のいずれかを選択します。
次のいずれかを選択します。
このフレームワークは PEP20 (The Zen of Python) の原則に基づいています。
Explicit is better than implicit
アセンブル方法と依存関係を注入する場所を明示的に指定する必要があります。
フレームワークの威力はそのシンプルさにあります。 Dependency Injector
強力な概念を実現するシンプルなツールです。
Dependency Injector
にスターを付けますDependency Injector
を使用して新しいプロジェクトを開始するDependency Injector
について知らせてくださいdevelop
ブランチへのプルリクエストを開く