依赖注入
问题描述:
我创建一个应用程序,我使用的外墙设计模式,其中请求将经过 控制器(的WebAPI) - >幕墙 - >业务 - >库 ,我使用统一配置初始化我的对象(外观,业务和存储库),在控制器层我将设置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中传递它,就像将对象从一层传递到另一层。这是正确的行为? 另外如果你给第一个问题的答案,那么我如何在我的外墙层进行集成测试。任何想法?任何帮助深表感谢。提前致谢。 Regards, Vivek
答
现在我应该从Façade层传递这个存储库对象吗?
不是,你不需要。在像您这样简单的图表中,您只需要一个统一控制器工厂和注入控制器的外观。 Unity将完成剩下的工作,初始化它将用于业务服务的外观,并且由于它需要一个存储库,Unity会查找并注入一个存储库,假设您事先注册了所有实现的接口。
Btw。我绝对推荐Unit of Work而不是Repository。 UoW更通用,允许客户访问所有可能的存储库。你可以把它看作所有存储库的容器。
控制器必须包含一个使用Unity容器配置所有对象的点。 Facade只需要知道业务,它不必知道业务的实现,因此您不需要通过业务层传递库。 – Alezis 2014-12-06 10:31:36