8

Windows サービス、ASP.NET Web サイト、WebApi コントローラーなど、複数のエントリ ポイントを持つマルチ プロジェクト ソリューションを開始しています。SimpleInjector は非常に高速であり、高度なものは必要ないため、SimpleInjector に落ち着きました。特徴。

私の理解では、SimpleInjector は起動時に一元的に構成する必要があります。次のプロジェクトの基本的なサンプル セットから始めます。

  • NS.Controllers
  • NS.Core.Data
  • NS.Core.Data.Model
  • NS.Web
  • NS.WindowsService (これは常に実行されているとは限りません)

複数のエントリ ポイントがある場合、SimpleInjector のブートストラップはどこに移動する必要があり、一元的に処理できるか/処理する必要がありますか (その場合、構成プロセスはすべてのプロジェクトを参照して、すべてのソリューション クラスを設定できるようにする必要があります)。

他のプロジェクトを参照しないグローバル インスタンス (NS.Global.Container など) を用意する必要がありますか? 各エントリ ポイントは、起動時に独自のインスタンス要件を追加する必要があります (NS.Core.Model などの重複登録を適切に処理します)。

ResolveUnregisteredType イベントを使用して、要求に応じて登録を処理する必要がありますか?

私は単に小学生の知識が不足しているだけですか?

更新しました:

以下のコメントでスティーブンが提供するリンクは、この質問に対する完全な回答を提供します。

多層アプリケーションで Ninject モジュールを配置する場所

MVC サイトのクラス プロジェクト部分で Ninject を初期化する方法

4

2 に答える 2

8

IPackageインターフェイスを使用しないのはなぜですか? 各モジュールでパッケージを作成し、各エントリ ポイントでcontainer.RegisterPackages();. たとえば、すべての構成は次のNS.Core.Data場所に配置さNS.Core.Data.dllれます。すると、 と の両方で使用できるようになりNS.WebますNS.WindowsService。それNS.Webに指定されたタイプを構成してから呼び出すだけcontainer.RegisterPackages();です。パッケージNS.Core.Dataは次のようになります。

public class CoreDataPackage : IPackage {
    public void RegisterServices(Container container) {
        container.Register<ISomeService,SomeImplementation>();
        // etc...
    }
}
于 2012-11-27T23:08:07.437 に答える
5

各エントリ ポイントには、独自のブートストラップ コンテナーが必要です。

NS.Web には、それが Web サイトであるため、1 つある必要があります (ここでは想定しています)。NS.WindowsService は .exe (サービス) であるため、1 つ必要です。

他のプロジェクトはクラス ライブラリのように見えるため、ブートストラップ コンテナーはありません。

理論的には、はい、各クラス ライブラリで部分的なブートストラップ コンテナーを定義して、それをメインのブートストラップ コンテナー (Web/サービス プロジェクト内) で使用して、作業を楽にすることができます。次に、部分コンテナーで、そのクラス ライブラリのコンポーネントのブートストラップを行います。

于 2012-11-27T13:48:34.313 に答える