5

看看我的控制器(我使用依賴注入到經理的依賴):帶有多個存儲庫和服務的.NET MVC控制器?

public RoleController(IRoleRepository roleRepository, ISiteRepository siteRepository, IUserRepository userRepository, IDbContext dbContext) 
{ 
    _roleRepository = roleRepository; 
    _siteRepository = siteRepository; 
    _userRepository = userRepository; 
    _dbContext = dbContext; 
} 

有許多依賴一類是一個代碼味道?對?

但是,在我的示例中,我需要將UsersSites關聯到Role,然後我需要這些依賴關係來完成此關聯。

郵件列表中的一些人我被告知,擁有太多的依賴關係是一些跡象表明某些東西可能是錯誤的。但我沒有別的辦法。我分開了自己的責任,在那種情況下我不知道該怎麼處理?有什麼問題嗎?

更新:

我需要存儲庫和的DbContext因爲的DbContext是我的UnitOfWork,倉庫不保存。

本示例是一個簡單的CRUD,其中包含一些其他功能,如具有GRID的視圖中的關聯。

更新2:

我使用的是架構在我的UI層是MVC。

+1

通常我只會創建聚合根的存儲庫,而不是每個實體。我不知道你的域名,但我的直覺告訴我你有太多的存儲庫。另外,爲什麼你需要存儲庫和dbcontext?最後,我通常更喜歡在「服務」中執行「編排」類型的業務活動,並讓服務處理存儲庫等。控制器的依賴關係只會變成服務。 – Brook

+0

@Brook查看更新。 –

+1

可能的重複[在asp.net-mvc中,是否有更優雅的方式使用IOC將多個存儲庫注入控制器?](http://stackoverflow.com/questions/7311623/in-asp-net-mvc- is-there-a-more-elegant-way-using-ioc -in-inject-mutiple-repositor) – Omar

回答

8

由於您使用良好的DI框架管理依賴項(即不使用poor man's DI),我不相信這是一件壞事。這樣,你明確地說控制器將需要所有這些東西,因爲它會。 (請注意,在你的應用程序的許多其他部分,這可能不是一個有效的參數 - 控制器在控制和指導程序流程方面很特殊,所以有一個自然的解釋,爲什麼它需要看到很多部分應用程序...)

但是,如果你真的想限制這種特殊情況下依賴關係的數量,它可能是有意義的創建MembershipService,其完成所有關心UsersSitesRoles工作。然後,這將依賴於這三個存儲庫,並且您的控制器只會依賴於成員資格服務。


在回答您的更新:您可以爲「每個web請求」單身工作單元(即DB上下文)登記 - 這是可能的溫莎城堡和許多其他DI框架。然後,您可以讓您的存儲庫依賴於它並執行所有更改,並讓控制器依賴它進行保存,並且它們都將獲得由DI框架交給它們的相同實例。

+0

看更新,問題是MVC是我的UI層。我收到的觀點是:控制器負責響應用戶的請求,原則上不應該與您的域相關。 –