【问题标题】:Dependency Injection in Facade layerFacade 层中的依赖注入
【发布时间】:2014-12-06 20:05:22
【问题描述】:

我正在创建一个应用程序,我正在使用外观设计模式,其中请求将通过 控制器 (webApi) -> Façade -> 业务 -> 存储库 我正在使用 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);
    }

}

现在我应该从 Façade 层传递这个存储库对象吗?

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 层中执行集成测试。任何想法?任何帮助深表感谢。提前致谢。 问候, 维韦克

【问题讨论】:

  • 控制器必须包含一个点,所有对象都将使用 Unity 容器进行配置。 Facade 只需要知道业务,它必须不知道业务的实现,因此您不需要通过业务层传递存储库。

标签: c# dependency-injection


【解决方案1】:

现在我应该从 Façade 层传递这个存储库对象吗?

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    相关资源
    最近更新 更多