立面层中的依赖注入

本文关键字:依赖 注入 | 更新日期: 2023-09-27 18:33:23

我正在创建一个应用程序,我正在使用外观设计模式,其中请求将通过控制器 (webApi( -> 外观 -> 业务 ->存储库我正在使用 Unity 配置来初始化我的对象(外观、业务和存储库(,在控制器层中,我将设置 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 中传递它,这就像将对象从一层传递到另一层。这是正确的行为吗?另外,如果您给出第一个问题,那么我如何在我的门面层中执行集成测试。知道吗?任何帮助都非常感谢。提前谢谢。问候维韦克

立面层中的依赖注入

现在我应该从外观层传递这个存储库对象吗?

不是真的,你不必。在像您这样简单的图形中,您只需要一个 Unity 控制器工厂和注入控制器的外观。Unity 将完成剩下的工作,要初始化外观,它将用于业务服务,并且由于它需要一个存储库,Unity 将找到并注入一个存储库,当然,假设您提前将所有接口注册到实现。

顺便说一句。我绝对推荐工作单元而不是存储库。UoW更通用,允许客户端访问所有可能的存储库。您可以将其视为所有存储库的容器。