use*_*937 3 c# linq dependency-injection data-transfer-objects unity-container
我正在尝试一个示例应用程序来测试依赖注入.在使用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;
}
Run Code Online (Sandbox Code Playgroud)
BookDTO是另一个项目中定义的数据传输对象.现在我想把我的项目松散地结合在一起.所以我创建了IDTOBase接口并使BookDTO实现了这一点.我有一个统一容器,我已经将BookDTO类的相关注册到IDTOBase.
但是,如何在原始方法中重写LINQ查询?什么将取代"新BookDTO()"?
谢谢
你从我想到的部分答案开始:'BookDTO是一个数据传输对象'.因此,抽象它几乎没有价值,因为它属于应用程序的一个非常特定的层.
BookDTO的作用是作为书籍的纯粹数据表示(以某种可能的可序列化形式).这将在应用程序堆栈中的低级别发生.任何需要使用此类数据的代码都应该创建一个可以在代码中使用的域对象"Book".这将书籍数据(BookDTO)的持久性和检索与其域表示(Book)分离.
我不认为你的界面定义是为了这个目的,因此DI在这里没有用处.我认为DI在这里发挥作用的是书籍DTO的检索.加载书籍数据的类将注入此类服务并使用它来检索BookDTO实例.