2012-03-26 32 views
14

tôi đọc này: http://symfony.com/doc/current/book/service_container.htmlDịch vụ Symfony 2 có nhiều phiên bản?

Nó nói:

$mailer = $this->get('my_mailer'); 

Là một tiền thưởng thêm, các dịch vụ Mailer chỉ được tạo ra một lần và các cùng dụ được trả mỗi khi bạn yêu cầu dịch vụ. Đây là hầu hết các hành vi bạn cần (linh hoạt hơn và mạnh mẽ), nhưng chúng tôi sẽ tìm hiểu sau về cách bạn có thể định cấu hình dịch vụ có nhiều phiên bản.

Làm cách nào để dịch vụ của tôi có nhiều phiên bản - tức là bất cứ khi nào tôi đến dịch vụ, tôi được cấp một phiên bản mới? Một cái gì đó như $this->getNew() hoặc một cái gì đó?

Trả lời

31

Bạn đang nói về phạm vi của dịch vụ. Bạn có thể tra cứu chúng here. Nói tóm lại, xác định dịch vụ của bạn như phạm vi nguyên mẫu thay vì container mặc định và container dependency injection sẽ chăm sóc để tạo ra một đối tượng mới mỗi lần bạn yêu cầu:

services: 
    my_service: 
     class: Someclass 
     scope: prototype 

Lưu ý: kể từ Symfony2.8, scope: prototype đã được thay thế bởi shared: false.

# Symfony >= 2.8 
services: 
    my_service: 
     class: Someclass 
     shared: false 
+4

Có cách nào để chỉ buộc tái tạo đôi khi không phải lúc nào không? –

+0

@RezaSanaie Bạn có thể cần phải xác định một dịch vụ trừu tượng và mở rộng hai lần để có một phiên bản mẫu thử nghiệm và chứa phạm vi của nó. Nếu bạn cần phải duy trì phiên bản mới của nguyên mẫu, bạn có thể ghi đè lên thùng chứa một phạm vi bằng cách thiết lập thể hiện mới cho nó. –

Các vấn đề liên quan