我正在尝试使用示例应用程序来测试依赖项注入(inject)。在使用 DI 之前,我的类中有以下方法:

public IQueryable<BookDTO> GetBooks()
{
    var books = from b in db.Books
                select new BookDTO()
                {
                    Id = b.Id,
                    Title = b.Title,
                    AuthorName = b.Author.Name
                };

    return books;
}

BookDTO 是另一个项目中定义的数据传输对象。现在我想将我的项目松散地结合在一起。所以我创建了 IDTOBase 接口(interface)并让 BookDTO 实现了这个。我有一个统一容器,我已经将 BookDTO 类的相关注册到 IDTOBase。

但是我将如何用我的原始方法重写 LINQ 查询?什么将取代“new BookDTO()”?

谢谢

最佳答案

您从我认为的部分答案开始:“BookDTO 是一个数据传输对象”。因此,抽象它几乎没有值(value),因为它属于应用程序的一个非常特定的层。

BookDTO 的作用是作为一本书的纯数据表示(以某种可能可序列化的形式)。这将发生在您的应用程序堆栈中的较低级别。任何需要使用此类数据的代码都应创建可在代码中使用的域对象“Book”。这将书籍数据 (BookDTO) 的持久性和检索与其域表示 (Book) 分离。

我认为您的接口(interface)定义不能用于此目的,因此 DI 在这里不能用于任何目的。我觉得 DI 在这里发挥作用的地方是检索 Book DTO。加载书籍数据的类将注入(inject)这样的服务并使用它来检索 BookDTO 实例。

关于c# - 使用依赖注入(inject)在构造函数之外创建类的新实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30171506/

10-12 15:54