我重構了一些soap服務,其中靜態方法用於記錄和調用數據庫實例。這是一個定製的代碼,而不是框架。 db是單身所以它有對象調用:如何正確使用Symfony DI服務容器?
Db->getInstance()->prepare("some pepared statement");
和記錄儀正常靜態方法:
Logger::log("Some log massage!");
我想改變這一切,我實現了Symfony的服務容器,並註冊這兩個服務:
$container->register('Logger', 'Helpers\LogHelpers\LogManager');
$container->register('Db', 'Helpers\ConfigHelpers\Db');
現在我應該將這些服務注入到項目中的所有類中,還是有辦法從某個全局變量中使用這些服務?我可以靜態地從容器中調用服務,但是製作容器有什麼意義呢?我在問這個問題,因爲在任何地方注入它似乎都很複雜。另一種方式是註冊的所有類與記錄器和Db依賴這樣的服務:
$container->register('SKSPartner', 'Partners\SKSPartner')->setArguments([
new Reference('SKSSoapClient'),
new Reference('Db'),
new Reference('Logger'),
new Reference('ServerManager')
]);
$container->register('ThirdPartyIntegrationPartner', 'Partners\ThirdPartyIntegrationPartner')->setArguments([
new Reference('ThirdPartyIntegrationSoapClient'),
new Reference('Db'),
new Reference('Logger'),
new Reference('ServerManager')
]);
,然後使用這些大類的服務。但是,然後項目的所有部分將成爲服務。據我所知,在服務容器中,應該只註冊將作爲Logger和Db一次又一次使用的類/服務?一些幫助在這裏將不勝感激。
你的理解是,只有可重用服務應該被定義是不正確的。理想情況下,服務的所有用戶也將是服務。接受的答案建議有其他方法,但請確保您使用它們是出於正確的原因。 – Cerad
@Cerad我現在試着使用只有可重用服務(Db和Logger)的方法,老實說,感覺不對。我不得不在很多地方注入服務。我將嘗試使所有服務都成爲服務,並且Db和Logger將成爲容器本身定義的依賴關係(就像我上面的第二個示例中那樣)。謝謝! – belijja