MVC存储库模式 - 访问其他存储库

时间:2013-12-12 00:12:16

标签: asp.net-mvc asp.net-mvc-4 dependency-injection repository-pattern

我有一个存储库,内部(在某些方法上)需要使用另一个存储库

我试图将所有依赖项放在构造函数上,将接口作为参数传递。但是我不知道如何处理这个具体情况。

我是否应该将此存储库作为参数传递?即使我不会在里面的每个方法上使用它?

由于

2 个答案:

答案 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
    }
}