簡體   English   中英

外觀層中的依賴注入

[英]Dependency Injection in Facade layer

我正在創建一個應用程序,並且使用的是Façade設計模式,其中請求將通過Controller(webApi)->Façade-> Business-> Repository,並且我正在使用Unity config初始化我的對象(façade,business和Repository)在控制器層,我將設置Unity config並初始化所有對象。 但是我的疑問是如何將存儲庫對象傳遞到業務層。 就像我在業務層中使用存儲庫方法調用一樣,它肯定需要存儲庫對象,因此我將其注入了業務層構造函數中。 請參閱以下代碼:

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中傳遞它,就像將對象從一層傳遞到另一層一樣。 這是正確的行為嗎? 另外,如果您為第一個問題提供答案,那么我該如何在Façade層中執行集成測試。 任何想法? 任何幫助深表感謝。 提前致謝。 問候,Vivek

現在我應該從立面層傳遞此存儲庫對象嗎?

不完全是,您不必這樣做。 在像您這樣簡單的圖形中,您只需要一個統一的控制器工廠並將立面注入到控制器中即可。 Unity將完成剩下的工作,以初始化將用於業務服務的外觀,並且由於它需要存儲庫,因此,Unity將查找並注入一個存儲庫,當然前提是您預先注冊了所有實現的接口。

順便說一句。 我絕對推薦使用工作單元而不是存儲庫。 UoW更通用,並且允許客戶端訪問所有可能的存儲庫。 您可以將其視為所有存儲庫的容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM