IrePository、iService、asp.net MVCアプリケーションの統一、参照質問
-
10-10-2019 - |
質問
私は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からリポジトリプロジェクトを参照したくありません。
私が持っているカップルのアイデア(それがそれを解決するかどうかわからない):
- IrePositoryインターフェイスをドメインモデルに移動し、unity.registerType <>を追加します。
- 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>();
所属していません StackOverflow