2012-04-04 30 views
11

Mục tiêu của tôi là thêm data_collector vào các lớp của tôi để hiển thị một số thông tin hữu ích trên thanh công cụ dành cho nhà phát triển. dịch vụ của tôi:Symfony2 ScopeCrossingInjectionException khi bạn sử dụng phạm vi nguyên mẫu

services: 
    my_api.auth.login: 
     class: YO\ApiV1\Services\Auth\Login 
     arguments: 
      - requestId 
      - "@old_sound_rabbit_mq.login_rpc" 
      - "@service_container" 
     scope: prototype 

Tôi cần phạm vi nguyên mẫu để có ví dụ khác nhau cho mỗi cuộc gọi mới. Nhân tiện, dịch vụ @ old_sound_rabbit_mq.login_rpc cũng có phạm vi "nguyên mẫu". Và, tôi muốn đính kèm data_collector, mà có thể được thực hiện với:

tags: 
    - { name: data_collector, template: "AcmeDebug:Collector:templatename", id: "your_collector_name" } 

Nhưng sau đó tôi nhận được một ngoại lệ:

ScopeCrossingInjectionException: Phạm vi Crossing tiêm được phát hiện: Định nghĩa "hồ sơ" tham chiếu đến dịch vụ "my_api.auth.login" thuộc về hệ thống phân cấp phạm vi khác. Dịch vụ này có thể không phải là có sẵn một cách nhất quán. Nói chung, an toàn hơn là di chuyển định nghĩa "profiler" đến phạm vi "nguyên mẫu" hoặc khai báo "vùng chứa" là phạm vi con của "nguyên mẫu". Nếu bạn có thể chắc chắn rằng phạm vi khác luôn hoạt động, bạn có thể đặt tham chiếu thành strict = false để thoát khỏi lỗi này.

Và điều này làm tôi bối rối, bởi vì tôi không biết phải làm gì. Tôi đã cố gắng đặt thuộc tính "strict = false", nhưng không có gì xảy ra.

+0

@mactpo đã bạn tìm thấy giải pháp cho việc này? – senK

Trả lời

6

Tôi đoán các dịch vụ đồng bộ của symfony có thể giúp bạn: doc

nếu không bạn có thể thiết lập "nghiêm ngặt = false" theo cách này:

services: 
    my.service.definition: 
     class: Acme\Services\BlaService 
     arguments: 
      - "@any_other_service_from_narrower_scope=" 
     scope: prototype 

Các "=" ở cuối của nét dịch vụ khi tiêm dịch vụ từ phạm vi hẹp hơn, sẽ chuyển "nghiêm ngặt" thành false

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