私はDIとIoCのコンテナをよく理解していますが、実際に何十種類ものクラスを複数の "モジュール"(DLLなど)で扱う方法は不明です。私がIoCで見たほとんどすべての例は、ほんの一握りのクラスを使い、Mainメソッド(またはWebアプリケーションの場合はGlobal.asax)でコンテナを手動で設定します。すべてを設定するために何百もの行がFor<I>().Use<T>()
構文を使用しているだけです。"現実の世界"のIoC - 多くのクラスを扱う方法?
これはレジストリ(StructureMap)クラスとカーネル(Ninject)クラス(これは私がよく知っている2つのIoCコンテナなので、他のIoCコンテナにも同様のことがあると思います)。
私の質問は、あなたのアプリケーション(リポジトリ、エンティティ、サービスなど)の各グループに対応する別のレジストリを作成しようとしていますか(私はその命名法を守るためにStructureMapで遊んでいます) 「インフラストラクチャー」クラス・ライブラリーとし、そのメイン・アプリケーション・エントリー・ポイントでそれらのクラスを結び付けようとしていますか?私はあなたがさらに行くことができ、それぞれの集約(DDD用語を使用する)のための1つのレジストリを持っていると仮定して、それらのすべてをアプリケーションの全セクションを包含するさらに広いレジストリクラス(例えば、より大きなLOBアプリケーションのCRM部分)複数の集約がある場合は、各集計ごとに1つのレジストリ配線を作成し、集計レジストリをすべて結合した大きなレジストリを作成してください。
基本例:
// MyApp.Infrastructure
class ServiceRegistry : Registry
{
public ServiceRegistry()
{
For<IOrderService>().Use<OrderService>();
// other services...
}
}
class RepositoryRegistry: Registry
{
public RepositoryRegistry()
{
For<IOrderRepository>().Use<OrderRepository>();
// other repositories...
}
}
// other registry files e.g. for Entities
// Global.asax or Program.cs or whatever entry point
ObjectFactory.Initialize(x => {
x.AddRegistry<ServiceRegistry>();
x.AddRegistry<RepositoryRegistry>();
// other registries
});
これは、論理的に組織化された何十というクラスであっても数十ものアプリケーションを処理するための好ましい方法ですか?