我有一個包含在私有Satis存儲庫中的包,因爲它的實體和存儲庫在多個應用程序之間共享。Symfony 3.3將注入庫注入服務
使用該捆綁包的其餘應用程序是Symfony 2.7和2.8應用程序。我正在開發一個新的應用程序,並且要求使用Symfony 3.3。
在symfony的3.3應用程序,我已經在我的services.yml試過這樣:
# Learn more about services, parameters and containers at
# http://symfony.com/doc/current/service_container.html
parameters:
#parameter_name: value
services:
# default configuration for services in *this* file
_defaults:
autowire: true
autoconfigure: true
# this means you cannot fetch services directly from the container via $container->get()
# if you need to do this, you can override this setting on individual services
public: false
# makes classes in src/AppBundle available to be used as services
# this creates a service per class whose id is the fully-qualified class name
CbmLtd\UvmsBundle\:
resource: '../../vendor/cbmltd/uvms-bundle/*'
exclude: '../../vendor/cbmltd/uvms-bundle/{Entity,Repository}'
UvmsApiV1Bundle\:
resource: '../../src/UvmsApiV1Bundle/*'
exclude: '../../src/UvmsApiV1Bundle/{Entity,Repository}'
上面給出了以下異常:
不能自動裝配服務 「UvmsApiV1Bundle \服務\ DealerService」:方法「__construct()」的參數「$ repository」引用類「CbmLtd \ UvmsBundle \ Repository \ DealerRepository」,但不存在這樣的服務。它不能被自動註冊,因爲它來自不同的根名稱空間。
好吧,所以我想我需要顯式聲明這個存儲庫作爲服務。在Symfony 3.3文檔中找不到有關將存儲庫聲明爲服務的任何內容,2.8語法也不起作用。
我將此添加到我的services.yml:
services:
...
CbmLtd\UvmsBundle\DealerRepository:
class: CbmLtd\UvmsBundle\Entity\DealerRepository
factory_service: doctrine.orm.entity_manager
factory_method: getRepository
arguments:
- CbmLtd\UvmsBundle\Entity\Dealer
但我仍然得到此異常:
不能自動裝配服務 「UvmsApiV1Bundle \服務\ DealerService」:參數 「$庫」 的方法「__construct()」引用類「CbmLtd \ UvmsBundle \ Repository \ DealerRepository」,但不存在此類服務。它不能被自動註冊,因爲它來自不同的根名稱空間。
我無法對CbmLtd \ UvmsBundle進行任何更改,因爲這是由多個應用程序使用的。任何幫助,將不勝感激。我從字面上花了幾個小時,這是非常令人沮喪的。
得到了: 「請加入到服務的類」 car_base.app。因爲我們可能需要根據編譯時檢查來添加方法調用,所以即使它是由工廠構建的(3.4) – itnelo