2016-11-24 48 views
2

我有一個C#的Web API項目,其結構如圖下圖(項目A) enter image description here循環引用問題的項目

在項目A上圖控制器使用項目A的服務,以做實際的工作,服務使用Repository來讀寫數據庫。 所有這些都使用Autofac依賴注入。 例子: 構造控制器,其使用各種服務

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

構造使用底層存儲庫,用於與一個數據庫中的服務的

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

當應用程序啓動如下所述的各種服務被註冊

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

現在我想添加另一個項目(在exa中命名)多個ProjectB),它只是一個類庫,將從ProjectA服務中調用,它將執行一些操作,然後使用ProjectA的存儲庫模式並將數據保存到數據庫中。 問題是,這種設計導致循環引用,2個項目不會編譯。 這裏也存在類似的問題How to solve circular reference? 但是答案並不清楚它是否正確。 任何想法?

+0

有你的圖中沒有循環依賴。你能否澄清一下循環依賴的地方? – Enigmativity

+0

@Enigmativity - 查看標題,2個_projects_(列)確實有一個圓圈。 –

+0

@HenkHolterman - 什麼標題?圖中沒有圈。這是一個有向無環圖。 – Enigmativity

回答

0

據我所知,你在這裏展示的不是循環引用。您不能在圖表上的箭頭之後繪製一個圓圈。

如果存儲庫類在項目A服務上,那麼你有一個循環引用,但這不是在問題上繪製的。考慮到這一點,如果是這樣的話移動庫項目A.

+1

在課堂上,沒有什麼是循環的,但是在項目/大會層面,它會是什麼? –

+0

我同意Peter B.在項目/ Assemly Level中存在循環引用。假設項目A中存在ServiceA,此服務A啓動服務B的新對象.ServiceB執行一些操作,然後調用Project的A存儲庫以保存在數據庫中。如果您嘗試構建項目B,它將會失敗,因爲它需要來自項目A的二進制文件用於存儲庫類。如果您嘗試先構建項目A,則它將失敗,因爲它需要Project B的ServiceB類 –

+0

@ChristophAdamakis - 項目A沒有存儲庫。我沒有看到一個循環。 – Enigmativity

2

外面可能是一些工作,但解決將是該Repository移動到一個新的ProjectRepo

然後有ProjectAProjectB兩個參考ProjectRepo,然後ProjectA也可以參考ProjectB無單需要A.

+0

聽起來不錯,但我必須重新設計一切:( –

+0

這不應該需要任何'重新設計'。只需稍微調整一下,然後重構實現。 –