質問

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

  • ビジネスオブジェクト - フォルダー
    • DomainModel(クラスLIB PRJ。) - エンティティフレームワーク2 Pocoエンティティ
  • データレイヤー - フォルダー
    • dataaccess(class lib prj。) - ef2 edmx
    • リポジトリ(クラスlib prj。) - Irepositoryインターフェイスとリポジトリコンクリートの実装
  • プレゼンテーションレイヤー - フォルダー
    • WebUI - MVCプロジェクト
  • サービスレイヤー
    • サービス(クラスLIB PRJ。) - ISERVICEインターフェイスとサービス(ファサードパターン)コンクリートの実装

すべてのプロジェクトは、ドメインモデルプロジェクトを参照します。

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

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

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

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

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

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

  1. IrePositoryインターフェイスをドメインモデルに移動し、unity.registerType <>を追加します。
  2. web.configでUnity構成を設定します

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

役に立ちましたか?

解決

サービスプロジェクトにある種のBootstrapperを追加します。次に、WebUIのBootstrapperを参照します。

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

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

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

var container = new UnityContainer()
    .AddNewExtension<ServiceLayerBootstrap>();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top