5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Python] DI(Dependency Injection/依存性注入)コンテナーどれにしよう?

Posted at

Pythonのmockは簡単にモンキーパッチができます。使えばDIコンテナなしでもユニットテストできます。
でも、DIコンテナに慣れた体がIoCを求めるので、DIコンテナーを探すことにしました。

DIコンテナーの要件

こんなDIコンテナが欲しいです。

  • タイプヒントから、コンクリートクラスを探して自動的に注入してくれる
  • シングルトンか、毎回生成かを選べる
  • インスタンス生成ファクトリを使用できる
  • コンストラクタインジェクションかプロパティインジェクション(クラスがコンテナに依存しない)

DIコンテナを探す旅

PyPiでDI Containerを検索すると10,000以上ヒットします。
え、まさか、これ全部?

ぐぐると152件ヒットしました。
それでも多過ぎ!

ここは先達に頼りましょう。

Injector

紹介されていた記事です。

コンストラクタインジェクションになります。
要件を全て満たしているようで、これがよさげかもしれません。

PInjector

紹介されていた記事です。

上記Injectorの再実装っぽく見えます。
タイプヒントではなく、引数名で依存性を解決しているのかな?

autocontainer

タイプヒントで依存性解決してくれます。
シングルトンかどうかは、デコレータではなく、コードで指定します。
シンプルで必要にして十分かも。

その他

コンテナへ自前で登録しなければいけなかったり、別途設定が必要だったりで、要件にあわなかったライブラリです。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?