2014-12-06 298 views
1

我創建一個應用程序,我使用的外牆設計模式,其中請求將經過 控制器(的WebAPI) - >幕牆 - >業務 - >庫 ,我使用統一配置初始化我的對象(外觀,業務和存儲庫),在控制器層我將設置Unity配置並初始化所有對象。但我的疑問是,我可以如何將資源庫對象傳遞給業務層。 就像我在業務層使用倉庫方法調用一樣,它肯定會需要倉庫對象,所以我將它注入到業務層構造函數中。請參見下面的代碼:依賴注入

public class MessageBusiness : IMessageBusiness 

{ 
    IMessageRepository _messageRepository; 

    public MessageBusiness(IMessageRepository messageRepository) 
    { 
     _messageRepository = messageRepository; 
    } 
    public int AddMessage(RS.DomainEntity.Model.Message newMessage) 
    { 
     return _messageRepository.AddMessage(newMessage); 
    } 

}

現在我應該通過從外觀層該庫對象?

public class MessageFacade : IMessageFacade 
{ 
    IMessageBusiness _messageBusiness; 

    public MessageFacade(IMessageBusiness messageBusiness) 
    { 
     _messageBusiness = messageBusiness; 
    } 

    public int AddMessage(RS.DomainEntity.Model.Message newMessage) 
    { 
     return _messageBusiness.AddMessage(newMessage); 
    } 
} 

如果不是那麼我可以注入這個存儲庫在我的業務層?如果是,那麼我們也需要在Façade中傳遞它,就像將對象從一層傳遞到另一層。這是正確的行爲? 另外如果你給第一個問題的答案,那麼我如何在我的外牆層進行集成測試。任何想法?任何幫助深表感謝。提前致謝。 Regards, Vivek

+0

控制器必須包含一個使用Unity容器配置所有對象的點。 Facade只需要知道業務,它不必知道業務的實現,因此您不需要通過業務層傳遞庫。 – Alezis 2014-12-06 10:31:36

回答

0

現在我應該從Façade層傳遞這個存儲庫對象嗎?

不是,你不需要。在像您這樣簡單的圖表中,您只需要一個統一控制器工廠和注入控制器的外觀。 Unity將完成剩下的工作,初始化它將用於業務服務的外觀,並且由於它需要一個存儲庫,Unity會查找並注入一個存儲庫,假設您事先註冊了所有實現的接口。

Btw。我絕對推薦Unit of Work而不是Repository。 UoW更通用,允許客戶訪問所有可能的存儲庫。你可以把它看作所有存儲庫的容器。