我有一个存储库,内部(在某些方法上)需要使用另一个存储库。
我试图将所有依赖项放在构造函数上,将接口作为参数传递。但是我不知道如何处理这个具体情况。
我是否应该将此存储库作为参数传递?即使我不会在里面的每个方法上使用它?
由于
答案 0 :(得分:2)
使存储库依赖于另一个存储库没有任何问题。并且,是的,将其作为参数传递
我假设您正在进行依赖注入,特别是构造函数注入。
实例化一个额外的存储库,有时候不会被使用(因为并非所有方法都使用它),这并不是一个让你避免它的可怕开销。如果它是一个更昂贵的资源(如打开文件或数据库连接),您可以使用一些替代技术。例如,在具有支持字段的属性中公开第二个存储库,该支持字段在使用服务位置对属性getter的第一次调用中填充,即直接在容器中查找,或者提供更智能的解决方案,但提供了一些DI框架,自动做这种事,like Unity's Lazy and similar solutions。
但我坚持认为,在这种情况下,开销并不合理。
注意:如果你有一个依赖循环(循环依赖),你也可以使用属性或Lazy技术来打破循环并使其工作。但是,在这种情况下,重构类(提取thrid类)以避免循环引用要好得多。这不是你的情况。
答案 1 :(得分:1)
我可能会在存储库之上创建一个服务层。将两个存储库注入服务层。
public LibraryCatalogueService {
IBookRepository _books;
IAuthorsRepository _authors;
public LibraryCatalogueService (IBookRepository books, IAuthorRepository authors)
{
_books = books;
_authors = authors;
}
public List<BookWithAuthor> GetBooksWithAuthors()
{
//do stuff to get books and get authors and then join them.
//return the list
}
}