0

私はUnityを初めて使用しますが、この質問はIoCにとってより一般的であり、IoC全体を実装するのはかなり新しいものです。このプロジェクト構造(わずかに簡略化)を使用したVS2010ソリューションがあります。

  • ビジネスオブジェクト–フォルダ
    • DomainModel(Class Lib prj。)– Entity Framework2POCOエンティティ
  • データレイヤー–フォルダー
    • DataAccess(Class Lib prj。)– EF2 EDMX
    • リポジトリ(Class Lib prj。)–IRepositoryインターフェイスとリポジトリの具体的な実装
  • プレゼンテーション層–フォルダ
    • WebUI –MVCプロジェクト
  • サービスレイヤー
    • サービス(Class Lib prj。)– IServiceインターフェイスとサービス(ファサードパターン)の具体的な実装

すべてのプロジェクトはDomainModelプロジェクトを参照します。

リポジトリはDataAccessプロジェクトを参照します。

サービスレイヤーはリポジトリプロジェクトを参照します。

WebUIはサービスプロジェクトとUnityアセンブリを参照します。

すべてのサービスタイプをWebUI(カスタムUnityControllerFactory.csを介したglobal.asax)に正しく挿入するようにUnityを構成しました。しかし、リポジトリオブジェクトを注入するようにサービスレイヤーでUnityを設定するにはどうすればよいですか?

開発中に誰もショートカットを使用せず、サービスレイヤーをバイパスしないようにするために、WebUIからリポジトリプロジェクトを参照したくありません。

私が持っているカップルのアイデア(それがそれを解決するかどうかはわかりません):

  1. IRepositoryインターフェイスをDomainModelに移動し、IRepositoryのUnity.RegisterType<>呼び出しを追加します
  2. Web.configでUnity構成をセットアップする

特にサービスレイヤー/リポジトリ用にUnityを構成する方法だけでなく、一般的にプロジェクトについても、どのような方向でも大歓迎です。

4

1 に答える 1

2

Service プロジェクトに何らかのブートストラップを追加します。次に、WebUI でブートストラッパーを参照します。

これを行う 1 つの方法は、小さな Unity 拡張機能を作成することです。このようなもの:

public class ServiceLayerBootstrap : UnityContainerExtension
{
    protected override void Initialize()
    {
        Container.RegisterType<IRepository, WhateverRepositoryImplementation>();
        // etc.
    }
}

次に、コンテナーを作成して初期化する Web プロジェクトで、次の操作を行います。

var container = new UnityContainer()
    .AddNewExtension<ServiceLayerBootstrap>();
于 2010-10-22T22:41:21.023 に答える