コンパイル時IOC


11

誰かがコンパイル時にIOCを実行するプロジェクトを開始しましたか(おそらくRoslynまたはLinq MethodInfoを使用して)。

IOCコンテナーでの私の経験はこれまでのところ素晴らしく、いくつかの小さな問題がありませんでした

  1. 多くのIOCコンテナは、ここで解決ロジックの多くが発生するため、起動が遅くなります
  2. コンパイルがコンストラクターの呼び出しを保証しないため、解決が可能かどうかを確認するのは難しい場合がよくあります。
  3. 多くの場合、IOCコンテナーはランタイムに小さなオーバーヘッドを追加します(一部は小さくもなく、多くの場合、すぐに起動するものはゆっくり実行されます)

理想的な解決策は、IOCの代わりにFactoryクラスを追加するコンパイル手順をビルドチェーンに追加することだと思われます。

誰もこれをやったことがありますか?そうでない場合は、なぜですか?

回答:


4

これを行うことはそのような問題ではないはずです。同じIoCロジックを実行するだけで、クラスをインスタンス化する代わりに、インスタンス化を行うコードを出力します。

しかし、これを行うことにより、IoCの大きな利点の1つ、つまり、アプリケーション全体を再コンパイルすることなく、コンポーネントの構成方法を変更することができなくなります。構成を置き換えるだけで、アプリケーションにさまざまなサービスまたはデータソースを使用させることができます。そして、この機能を最大限に活用するアプリケーションはまだ見ていませんが、それでもIoCの成功の大部分を占めています。


はい、可能です。しかし、私はそれを行うIoCコンテナをまだ見ていません。また、現在の傾向はコード(流codeなAPI)での登録に向かっているように思われることに注意しました。それを考えると、私は言ったIoCコンテナーを書くことを検討しています。
ARTS

ヒロ(github.com/philiplaureano/Hiro)はコンパイル時にそのようなことをするかもしれないことを覚えているようです。
lzcd 14

2
「しかし、これを行うことで、IoCの大きな利点の1つを取り除いています。アプリケーション全体を再コンパイルすることなく、コンポーネントの構成方法を変更できることです。」これをアプリケーション全体に適用するのはやり過ぎだと思います。アプリケーションのすべての部分をプラグインに変えています。さらに、両方の手法が共存可能である必要があります-コンパイル時と実行時に一部のコンポーネントを配線できない理由はありません。
ドーバル14

それがどのように大きな利点であるかはわかりません。実行時にコンポーネントを完全に置き換えているコンテキストは何ですか?いくつかの設定ユースケースはありますか?
andyczerwonka

4

Dagger for Java / Androidはそれを行います。ほとんどのランタイムエラーをコンパイルエラーに変換するなど、ほぼ完全にコンパイル時のコード生成エクスペリエンスを提供するために、ランタイムマジック(Guiceのような)を犠牲にします。

.NETでもクールになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.