Tôi mới làm quen với IoC và DI này. Tôi cảm thấy mình có khái niệm nếu bạn truyền đi các đối tượng có phạm vi toàn cầu, nhưng tôi không nhận được cách nó hoạt động khi bạn cần truyền xung quanh một đối tượng có trạng thái logic cụ thể. Vì vậy, ví dụ, nếu tôi muốn tiêm một đối tượng người vào một đối tượng lệnh ghi tập tin-làm thế nào tôi có thể chọn đối tượng người đúng động? Từ những gì tôi đã thấy, tôi có thể mặc định xây dựng đối tượng, nhưng ngắt kết nối của tôi là bạn sẽ không sử dụng một đối tượng người mặc định, nó sẽ cần phải năng động. Tôi giả định rằng container IoC chỉ có thể duy trì trạng thái của đối tượng cho bạn khi nó được truyền xung quanh, nhưng sau đó giả định rằng bạn đang xử lý chỉ một đối tượng người vì sẽ không có an toàn luồng, phải không? Tôi biết tôi đang thiếu một cái gì đó, (có thể một cái gì đó giống như một factoryclass), nhưng tôi cần thêm một chút thông tin về cách thức đó sẽ làm việc.IoC Dependency Injection cho các đối tượng stateful (không phải toàn cầu)
Trả lời
Vâng, bạn luôn có thể tiêm Abstract Factory vào người tiêu dùng của mình và sử dụng nó để tạo các đối tượng có phạm vi cục bộ.
Điều này đôi khi cần thiết. Xem các ví dụ:
- MVC, DI (dependency injection) and creating Model instance from Controller
- Is there a pattern for initializing objects created via a DI container
- Can't combine Factory/DI
Tuy nhiên, nói chung chúng ta có xu hướng không sử dụng DI cho các thực thể, nhưng chủ yếu là cho các dịch vụ. Thay vào đó, các thực thể thường được tạo thông qua một số loại Kho lưu trữ.
Khi bạn xây dựng một đối tượng dịch vụ (ví dụ: WriteFileService
), bạn tiêm vào những thứ cần thiết trong nội bộ để hoàn thành công việc của mình. Có lẽ nó cần một đối tượng hệ thống tập tin hoặc một cái gì đó.
Đối tượng Person
trong ví dụ của bạn phải được chuyển cho đối tượng dịch vụ dưới dạng tham số cho cuộc gọi phương thức. ví dụ. writeFileService.write(person)
Vì vậy, bạn sẽ không tiêm WriteFileService vào đối tượng Entity person ... vì vậy trong trường hợp này, tôi có thể thấy cách thực thể có thể được sử dụng mà không có cơ sở hạ tầng DI. Mặc dù, WriteFileService có thể sử dụng cơ sở hạ tầng DI khi nó được tạo ra (dựa trên nhu cầu cho một lớp được tiêm vào một đầu ra cụ thể, ví dụ:WriterA - ghi vào cơ sở dữ liệu, WriterB - quyền đối với bàn điều khiển, v.v ...). – mytwocents
- 1. ASMX Dependency Injection và IoC
- 2. Hiểu IoC Container và Dependency Injection
- 3. Mocking mà không có IoC hoặc Dependency Injection
- 4. toàn cầu Nhà nước và Singletons Dependency Injection
- 5. Biên dịch-thời gian/Post-Build Dependency Injection IoC?
- 6. Dependency Injection và phát triển năng suất
- 7. Dependency Injection Container vs Mẫu đăng ký
- 8. Inversion of Control <Dependency Injection
- 9. PHP Dependency injection khi các đối số cho hàm tạo không có sẵn
- 10. Android và Dependency Injection
- 11. Groovy Dependency Injection
- 12. Dependency Injection, tiêm một đối tượng "tiêm" (dịch vụ) vào một newable (thực thể)
- 13. Dependency Injection wcf
- 14. Dependency Injection Thực hành tốt nhất
- 15. Automapper cùng với Dependency Injection
- 16. Symfony 2 Dependency Injection & autowiring
- 17. Unity Dependency Injection cho các dịch vụ WCF
- 18. Dependency Injection container - Factory Pattern
- 19. ASP.NET MVC: HTTPContext và Dependency Injection
- 20. Tùy chỉnh ResourceProviderFactory Dependency Injection
- 21. Câu hỏi về New Dependency Injection khi một phương pháp cần tạo đối tượng mới
- 22. Dependency Injection & Spring Framework là gì?
- 23. Dependency Injection in .NET với các ví dụ?
- 24. Đặt tên một khuôn khổ Dependency Injection đơn giản
- 25. Thực hành Singleton & Dependency Injection question
- 26. Đối tượng toàn cầu Javascript
- 27. dlclose() không gọi destructor của các đối tượng toàn cầu
- 28. Injection Dependency Spring và Plugin Jar
- 29. Xuân Dependency Injection vào đậu serializable
- 30. Bảo toàn khả năng tự động hoàn thành với Symfony2 Dependency Injection
Vì vậy, nói chung, các thực thể sẽ không phải là một phần của cơ sở hạ tầng DI? Tôi có quá phức tạp không? – mytwocents
Đúng vậy: Thực thể và đối tượng giá trị có khuynh hướng sống một cuộc sống riêng biệt. Theo một nghĩa nào đó, chúng vẫn được quản lý bởi cơ sở hạ tầng DI (lý tưởng là mọi thứ), nhưng theo cách rất gián tiếp. Chúng thường được đọc và ghi vào bộ nhớ vĩnh viễn thông qua Kho lưu trữ hoặc những thứ tương tự và * những người đó là các Dịch vụ là một phần của cơ sở hạ tầng DI. –
Ok, tôi nghĩ rằng DI chính đã nói rằng đối tượng Enitity người nên được làm sẵn từ container IoC (thông qua cấu hình) ... – mytwocents