c# - 使用依赖注入(inject)在构造函数之外创建类的新实例

标签 c# linq dependency-injection unity-container data-transfer-objects

我正在尝试一个示例应用程序来测试依赖注入(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/

相关文章:

c# - 如何获取在资源 Xamarin.android 中创建的字符串的值

c# - 查找属于同一泛型类的所有属性

arrays - 从多维数组中删除 Nothing 值

.net - 尝试激活 'DatabaseConfiguration' 时无法解析类型 'MyDbContext' 的服务

c# - XmlSerializer 不显示对现有实例的更改

c# - 在 C# 中分词器/拆分?

c# - "An attempt was made to load a program with an incorrect format"

c# - 如何连接两个表,其中条件 'Where' 与与第一个表关联的第三个表相关

java - 在这种情况下,如何使 spring 在使用泛型时注入(inject)正确的 bean?

c# - 无法使用依赖注入(inject)访问我的存储库(变量仍然为空)