2016-11-24 5 views
2

を投影します実際の業務を行うために、サービスはリポジトリを使用してデータベースを読み書きします。 これらはすべてAutofac Dependency Injectionを使用しています。 例:コントローラの コンストラクタ種々のサービスを使用循環参照問題は、私は、プロジェクトAにおける上図コントローラアーキテクチャ次の図(PROJECTA) <a href="https://i.stack.imgur.com/EVYZI.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/EVYZI.jpg" alt="enter image description here"></a></p> <p>に示されているC#ウェブAPIプロジェクトのために、プロジェクトAのサービスを使用した

public DKMenuController(ITokenService tokenService, IUserService userservice, IDKMenuService dkMenuService) 
    { 
     _tokenService = tokenService; 
     _dkMenuService = dkMenuService; 
     _userservice = userservice; 
    } 

次のようにアプリケーションの起動時に、様々なサービスが登録されているDB

public DKMenuService(IRepository repository) 
    { 
     this._repository = repository; 
    } 

と通信するための基礎となるリポジトリを使用するサービスのコンストラクタ

this.RegisterType<Repository>().As<IRepository>().InstancePerRequest(); 
this.RegisterType<DKMenuService>().As<IDKMenuService>().InstancePerRequest(); 

ここで別のプロジェクト(exa mple ProjectB)はProjectAサービスから呼び出され、ProjectAのリポジトリパターンを使用してDBにデータを保存します。 問題はこのデザインが循環参照につながり、2つのプロジェクトがコンパイルされないことです。 同様の質問がここにあります。How to solve circular reference? ですが、答えが正しいかどうかはそれほど明確ではありません。 アイデア

+0

を必要とせずにProjectBを参照することができます。循環依存がどこにあるのか明確にしてください。 – Enigmativity

+0

@Enigmativity - ヘッダーを見ると、2つの_projects_(列)には円があります。 –

+0

@HenkHolterman - どのヘッダ?この図には円はありません。これは、有向非循環グラフです。 – Enigmativity

答えて

0

私が知っている限り、あなたがここに示しているものは循環参照ではありません。ダイアグラムの矢印の後に円を描くことはできません。

リポジトリクラスがプロジェクトAサービスにある場合は、循環参照がありますが、これは質問には表示されません。その場合は念頭に置いて、これを持つことは、リポジトリ外のプロジェクトA.

+1

クラスレベルでは何も円形ですが、プロジェクト/アセンブリレベルではそれはありますか? –

+0

私はPeter B.に同意します。project/Assemly Levelには循環参照があります。プロジェクトAにServiceAが存在するとします。このサービスAはサービスBの新しいオブジェクトを開始します.ServiceBはいくつかのことを行い、DBに保存するためにProjectのAリポジトリを呼び出します。プロジェクトBをビルドしようとすると、リポジトリクラスのプロジェクトAのバイナリが必要になるため、失敗します。最初にプロジェクトAをビルドしようとすると、プロジェクトのBサービスBクラスが必要になります。 –

+0

@ChristophAdamakis - プロジェクトAにはリポジトリがありません。私はサイクルを見ません。 – Enigmativity

2

を移動するにはいくつかの仕事かもしれないが、修正は新しいProjectRepoRepositoryを移動することです。

その後ProjectAProjectB両方の参照ProjectRepoを持って、その後、ProjectAもBは、あなたの図には循環依存関係はありませんA.

+0

それは良いと思いますが、私はすべてを再設計しなければなりません:( –

+0

それは 'redesign'を必要とすべきではありません。 –

関連する問題

 関連する問題