私は DI と IoC が初めてで、どの IoC コンテナーを学習するかを決めようとしています。参照されている 3 つのコンテナーのパフォーマンスが非常に優れているように見えるいくつかのパフォーマンス比較を見てきました。ただし、Hiro または Simple Injector を含む機能比較は見つかりませんでした。Autofac のコミュニティは最大のようですが、Hiro と Simple Injector はベンチマークで非常に高速であり、特に Simple Injector は非常に習得が容易であると主張しています。とはいえ、機能セットが限られているため、1 つを学習して別のものに切り替える必要はありません。そのため、Autofac はかなり成熟しており、機能が充実しているため、私は Autofac に傾倒しています (良い記事はこちらとこちら)。) だけでなく、利用可能な最速の IoC コンテナーの 1 つでもあります。これらの 3 つのコンテナーのうち少なくとも 2 つを使用した経験のある人はいますか? 機能の比較を提供できますか?
1 に答える
まず、私はSimple Injectorの主任開発者です。
ほとんどの場合、コンテナーのパフォーマンスは問題にならないというマークの意見に同意します。それでも、コンテナによっては、ある時点でパフォーマンスが非常に悪く、パフォーマンスの観点から構成のどの部分に問題があるかを直感的に判断するのが難しい場合があります。ほとんどのパフォーマンスの問題は、使用するコンテナーに関係なく、構成を変更する (登録をシングルトンに変更する、キャッシュを追加するなど) ことで解決できます。ただし、その時点で、コンテナーの構成が非常に複雑になる可能性があります。Simple Injector で解決しようとしたのは、この複雑さです。成功したかどうか (または、DI コンテナーを使用するか、さらに別の DI コンテナーを使用することが有用かどうか) を他の人に判断してもらいたいと思います。
ただし、プロジェクトを開始したときの最初のリストでは、パフォーマンスはそれほど高くありませんでしたが (単純さはそうでした)、(ロックフリーでExpression
ツリーベースの) 設計により、最適化を行うことができ、フィールドで最速のコンテナーの1 つになりました (非常に機能が豊富で非常に拡張可能です)。ほとんどの場合、手動でインスタンスを新規作成する場合と非常に近いパフォーマンスが得られます。
とはいえ、依存性注入をパターンとして学習するには、特定の DI コンテナーの操作を学習するよりも時間がかかります (マークの本は両方について本当に役に立ちます)。コンテナー (単純なインジェクターでさえ) は、DI とSOLIDを理解するのに役立ちません(ただし、その制限のいくつかは、クリーンなアプリケーション設計を行うように促します)。
Simple Injector は、DI シーンではかなり新しい (または遅い) ものです。このため、それと他のものとの比較はあまりなく (こことここにはいくつかありますが)、他のフレームワークに比べてユーザー数は限られていますが、急速に増加しています ( Roy Osherove の古い世論調査によると、Simple Injector は当時の市場シェアは約4%)。Simple Injector は多くの機能を備えているため、あまり比較されていないのは残念です (たとえば、ドキュメントの高度なシナリオのセクションを参照してください)。Simple Injector は、リンクした比較から欠落しています (パート 1とパート 2)、Simple Injectorの機能リストは次のとおりです(ただし、著者の新しい比較の1つにSimple Injectorが追加されていることに注意してください):
- フレームワーク:シンプルインジェクター
- バージョン:3.0
- ライセンス:MIT
- 最小 dll : 1
- サイズ:342キロバイト
- Fluent : 不要、プログラムのみ
- 自動登録: あり
- 属性の使用法:含まれていません(ただし、拡張により可能です)
- XML の使用法:サポートされていません
- プロパティ注入:はい (オプトイン) .
- コンストラクター注入:はい
- 複数のコンストラクター: 含まれていませんが、拡張可能です
- 再帰依存: 意味のあるエラー
- シングルトン:はい
- トランジェント:はい
- その他/カスタム:はい、プラグイン可能
- カスタム インスタンス: サポート
- オープン ジェネリック:含まれています
- 未登録の型解決:はい
- 自動モッキング:含まれていませんが、拡張可能です。
- 特別な機能:診断サービス、ジェネリック型のデコレーターの登録、部分的なオープン ジェネリック、条件付き/コンテキストの登録とパフォーマンス。Web RequestやLifetime Scopingなどのライフスタイル向けの NuGet 拡張パッケージがあります。ベースの
Expression
API を使用すると、インターセプトなど、ほぼすべての高度なシナリオのサポートを追加できます(ただし、デコレータの使用は促進されます)。
あなたの要件が何であるかはわかりませんが、Simple Injector はあなたのプロジェクトの存続期間中、役に立ちます。問題がある場合は、Stackoverflow.com またはSimple Injector フォーラムで質問してください。Simple Injector の寄稿者やその他の愛好家が喜んでお手伝いします。そして、一般的な DI の問題を解決できるStackoverflow ユーザーがたくさんいることを忘れないでください。