3

以前のプロジェクトでCastleWindsorを使用していて、とても気に入りました。現在のプロジェクトでは、別のIoCコンテナを使用することを検討しています。Castle Windsorは、2007年以降、新しいリリースがなく、バージョン1.0でもないため、商用環境で使用することを正当化することは困難です。

Castle Windsorについて私が気に入っていることの1つは、サービスを実装するだけで、すべての依存関係が設定された後、コンテナーにサービスのInitializeメソッドを呼び出させることができることですIInitializable。私はこれをよく使いました。コンストラクターインジェクションの代わりにプロパティインジェクションを簡単に実行できるようになり、コードとテストがかなりクリーンアップされます。

代わりにStructureMap、AutoFac、Unity、Spring.Netを見てきましたが、これらのうちSpring.Netだけが同様のものをサポートしており、自動的にInit()メソッドを呼び出します。残念ながら、Spring.Netは、IoCコンテナーを操作する方法を実際にはサポートしていません(インターフェイス宣言ではなく文字列キーに基づいて挿入するため、自動配線のサポートも制限されています)

私が見たIoCコンテナの同様の機能を見逃しましたか?IoCコンテナの操作方法はどういうわけか間違っていますか?または、IInitializableやInit()のようなものをサポートする他のIoCコンテナはありますか?

4

4 に答える 4

4

Autofacはそれを行うことができます-彼らはそれをStartableと呼んでいます

于 2009-04-20T16:10:01.213 に答える
2

LinFu.IOCにはそれがあります-それはIInitializeと呼ばれています。あなたはここでそれを見つけることができます:github.com/philiplaureano/LinFu

于 2011-03-17T06:20:45.750 に答える
2

StructureMapを使用すると、次のようなことができます。

ForRequestedType<IFoo>()
  .TheDefaultIsConcreteType<Foo>()
  .OnCreation(x => x.Init());

クラスに「初期化」インターフェースを実装するほど簡単ではありませんが、DIコンテナー固有のインターフェースから継承することで、クラスの実装を選択したDIコンテナーに結び付ける必要がないことも意味します(ただし、わかりませんが)実際にどれだけの問題があるか)。

現在、コンストラクタインジェクションがはるかに一般的に使用されていると思います。プロパティインジェクションは、DIコンテナにオブジェクト構築を実行させることが不可能な場合(ASP.NET Webフォームなど)のフォールバックとして広く見られています。私はそこで間違っている可能性があります、それは主題に関する私の見解です!

プロパティインジェクションは「コードをクリーンアップしてかなりテストする」と本当に思いますか?コンストラクターインジェクションは「よりクリーン」だと思うので、これは興味深いことです。これは、私が通常行う方法であるためだと思います。これは、私が慣れている方法です。:)

于 2009-04-20T16:13:56.210 に答える
2

Castleはしばらくの間リリースされていない可能性がありますが、まだ活発に開発されています。ここで最新の(かなり安定した)ビルドを入手できます

また、まもなく公式のv2.0リリースがリリースされる予定です。それが良いことを知っているなら、あなたがすでに知っているものを使ってみませんか?

于 2009-04-21T13:01:55.523 に答える