4

Scala 2.8 の名前付きおよびデフォルト引数機能を利用できるのであれば、JavaBean プロパティ注入よりもコンストラクター注入を使用したいと思います。それをサポートする、または簡単に拡張できるIoCコンテナはありますか? (必要な情報は、実行時にscala.reflect.ScalaSignatureクラスの注釈にあります。)

IoC コンテナーからの基本的な (?) 期待もいくつかあります。

  • 自動配線 (ターゲット クラス/特性またはアノテーションによる、1 対 1 および 1 対多の両方)
  • 明示的なインジェクション (明示的なワイヤリング) はそれほど手間がかかりません (Guice が弱いように)。Likeuserはそのまま注入されnew ConnectionPool(user="test")ます。
  • シャットダウン時のクリーンアップのためのライフサイクル コールバック (適切な順序で)

Spring は明らかにこれらを実行できますが、名前付きパラメーターはサポートしていません。-s を使用してFactoryBeanScala と Spring を橋渡しすることを検討しましたが、私の知る限り、それは手間がかかりすぎる (ボイラープレートまたはコード生成) ことを意味します。

4

4 に答える 4

3

パートA

Scala 署名を解析し、現在名前付きパラメーターを解決できる進行中のリフレクション ライブラリがあります: https://github.com/scalaj/scalaj-reflect

残念ながら、メソッドを呼び出すことができるように Java リフレクションに結び付けたり、デフォルト値を解決するためのロジックを追加したりしていません (これは簡単なはずですが)。どちらの機能も、私のやることリストの上位にあります :)

これ自体は IoC コンテナーではありませんが、私の別のプロジェクトhttps://github.com/scalaj/scalaj-springの前提条件です。scalaj-spring の作業は、署名ベースのリフレクションを実施するまで、価値のある進歩を遂げることができないことが盲目的に明らかになったときに停止しました。

パート B

とにかく、これらはすべて、大企業の人々を対象としています。光沢のある新しい Scala コードを巨大なレガシー システムに統合する以外に選択肢がない人... それがあなたのユース ケースでない場合は、Scala 内で直接 Scala DI を実行できます。

Lift バナーの下で提供される DI サポートがあります: http://www.assembla.com/wiki/show/liftweb/Dependency_Injection

また、ケーキのパターンへの参照を探す必要があります。

于 2011-03-11T17:18:22.530 に答える
2

Scala の別の依存性注入フレームワークはsubcut です

于 2011-08-10T08:34:33.100 に答える
1

私は、Scala と Spring を橋渡しするために FactoryBean-s を使用することを検討しましたが、それは手間がかかりすぎることを意味します。

複雑さを理解しているかどうかはわかりません。実際、Scala で Spring FactoryBeans を実装するのは非常に簡単です。この小さな記事をチェックしてくださいhttp://olegzk.blogspot.com/2011/07/implementing-springs-factorybean-in.html

于 2011-07-10T15:15:22.900 に答える
1

Scala プログラミング言語の IoC コンテナーである Sindi をリリースしました。

http://aloiscochard.github.com/sindi/

于 2011-08-10T08:17:13.913 に答える