Facade层中的依赖注入

时间:2014-12-06 09:10:02

标签: c# dependency-injection

我正在创建一个应用程序,我正在使用Façade设计模式,请求将通过 控制器(webApi) - >外墙 - >业务 - >存储库 我使用Unity配置初始化我的对象(façade,business和repository),在控制器层我将设置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中传递它,就像将对象从一个层传递到另一个层。这是正确的行为吗? 另外如果你给第一个问题的ans,那我怎么能在我的Façade层执行集成测试。任何的想法?任何帮助深表感谢。提前致谢。 问候, 的Vivek

1 个答案:

答案 0 :(得分:0)

  

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

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

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

相关问题