我正在创建一个应用程序,我正在使用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
答案 0 :(得分:0)
现在我应该从Façade层传递这个存储库对象吗?
不是,你没必要。在像你这样简单的图形中,你只需要一个统一的控制器工厂和外观注入控制器。 Unity将完成剩下的工作,初始化它将用于业务服务的外观,并且因为它需要一个存储库,所以Unity会找到并注入一个,当然假设您事先将所有接口注册到实现。
顺便说一下。我绝对推荐工作单元而不是存储库。 UoW更通用,允许客户端访问所有可能的存储库。您可以将其视为所有存储库的容器。