2010-12-29 13 views
0

3層のWindowsアプリケーションでは、どこに1の設定を含む設定ファイルを配置しますか? フロントレイヤーの場合は、プロジェクトのIUnityContainerインターフェイスなどを認識するために、フロント、ビジネス、データレイヤプロジェクトのすべてでunity.dllを参照する必要がありますか?Unity Configuration Fileはどこに置くのですか?

設定コンテナはどこにロードされますか?フロントレイヤーのメインメソッドまたはデータレイヤーに配置されますか、必要に応じてコンテナをロードしますか?

すべてがフロントレイヤーに置かれている場合は、プロジェクト全体がフロントレイヤーに依存していないため、WindowsアプリケーションからWebアプリケーションにフロントレイヤーを変更すると、再びユニティ作業を行う必要があります。

+0

少なくとも3つの異なる質問です。 –

答えて

8

Unityまたはそのような他のIoCコンテナは、アプリケーションの最初のブートストラップを超えてアプリケーション内の役割を果たすべきではありません。そして、それはビジネスとデータのレイヤーに入るべきではないと強調しています。

したがって、Unityを使用してMainでアプリケーションをブートストラップし、その後Unityが完了します。 Unityがあなたのアプリケーションの他の部分に触れないようにしてください。

How I use Inversion of Control containersとフォローアップPulling from the containerは、このトピックの詳細な内容です。

すべてがフロントレイヤーに配置されている場合は、プロジェクト全体がフロントレイヤーに依存しないため、WindowsアプリケーションからWebアプリケーションにフロントレイヤーを変更すると、再びユニティ作業を行う必要があります。

正しく設定していない場合は、アプリケーションのコンポーネントを解決するためにUnityは必要ありません。 Unity、およびその他のIoCコンテナは、その問題を解決するための非常に便利なツールです。 Unityを必要としないようにアプリケーションを作成する必要があります。 Unityやその他のIoCコンテナを簡単にプラグインして、アプリケーションが実行する必要のあるコンポーネントを解決することができます。依存性注入の

3つのR sが

  • リリース
  • 登録がコンテナたときに、あなたにセットアップされ

    1. 登録
    2. 解決されています。これは、アプリケーションがMainで始まるときに発生します。解決は、アプリケーションのルートコンポーネントを解決するときです。これは、アプリケーションのコアコンポーネントを連携させるものです。リリースは、アプリケーションが終了し、コンポーネントが適切にリリースされるようにコンテナを廃棄するときです。コンテナは決して決して決してNever、あなたはこれを超えてあなたのアプリケーションに入ることはないことに注意してください。

    +1

    が完璧です。素晴らしい答え。 – InfoLearner

    +0

    すみませんがわかりません。私は自分のデータレイヤーで使用しているインスタンスを登録しようとしていますが、データレイヤーはunity.dllを認識していません。フロントレイヤーにそれらを登録すると、フロントレイヤーはデータレイヤーのクラスを認識しません。 – InfoLearner

    +0

    @ fm55:あなたのデータ層がNHibernateから 'ISessionFactory'を必要としているとしましょう。アプリケーションルートが 'ISessionFactory'を渡すことを期待しているとしましょう。したがって、コンテナに 'ISessionFactory'を登録します。次に、アプリケーションルートを解決すると、アプリケーションルートがデータレイヤーに渡して渡す 'ISessionFactory'をインスタンス化します。アプリケーションがシャットダウンすると、コンテナで解決された 'ISessionFactory'が解放されます。 – jason

    1

    これはすべて、フロントレイヤーでUnityを使用しているのか、ミッド/バックレイヤーでのみ使用しているのかによって異なります。 バックエンドでUnityのみを使用している場合は、Unity構成ファイルをバックエンド実行可能ファイルと同じディレクトリに配置します。 フロントエンドでもUnityを使用している場合は、フロントエンドをバックエンドとは独立して実行可能な設定ファイルの2番目のコピーが必要な場合があります。

    BootstrappingメソッドでUnityを参照することに関するJasonのアドバイスは良いアドバイスです。そのため、ブートストラップを起動するサーバー実行可能ファイルと同じディレクトリに、および/または起動するクライアント実行可能ファイルのディレクトリに設定ファイルが必要ですブートストラップ。

    私が現在取り組んでいるシステムでは、クライアントとサーバーの両方で同じブートストラップコード(中間層DLL)を使用します。これは、両方でIoCを使用するためです。これは、クライアントEXEとサーバーEXEの両方が個別の構成コピーを必要とすることを意味します。

    +0

    私は自分のデータレイヤーで使用しているインスタンスを登録しようとしていますが、データレイヤーはunity.dllsを認識していません。フロントレイヤーにそれらを登録すると、フロントレイヤーはデータレイヤーのクラスを認識しません。 3つの設定ファイルを作成することをお勧めします。各設定ファイルは各レイヤーに1つずつあり、その中にインスタンスを登録します – InfoLearner

    関連する問題