【问题标题】:MVC Repository Pattern - Accessing other Repositories [closed]MVC 存储库模式 - 访问其他存储库 [关闭]
【发布时间】:2023-03-27 20:04:01
【问题描述】:

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

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

我是否也应该将这个 repository 作为参数传递?即使我不会在里面的每个方法上都使用它?

谢谢

【问题讨论】:

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


【解决方案1】:

使存储库依赖于另一个存储库没有任何问题。而且,是的,将其作为参数传递

我假设您正在进行依赖注入,特别是构造函数注入。

实例化一个额外的存储库,有时不会使用它(因为并非所有方法都使用它)它并不是一个可怕的开销,让你避免它。如果它是一种更昂贵的资源(例如打开文件或数据库连接),您可以使用一些替代技术。例如,在具有支持字段的属性中公开第二个存储库,该支持字段在使用服务位置对属性 getter 的第一次调用中填充,即直接在容器中找到它,或者提供更智能的解决方案,但提供了一些 DI 框架,其中自动做这种事情,like Unity's Lazy and similar solutions

但我坚持认为,在这种情况下,开销并不能证明它是合理的。

注意:如果你有一个依赖循环(循环依赖),你也可以使用属性或惰性技术来打破循环并使其工作。但是,在这种情况下,最好重构类(提取第三个类)以避免循环引用。这不是你的情况。

【讨论】:

    【解决方案2】:

    我可能会在存储库之上创建一个服务层。将两个存储库都注入服务层。

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

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 2017-04-26
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 2016-08-02
      • 2015-02-12
      • 2010-10-01
      • 1970-01-01
      相关资源
      最近更新 更多