dbインスタンスのロギングと呼び出しに静的メソッドが使用されているSOAPサービスをリファクタリングしています。それはフレームワークではなく、カスタム作成のコードです。Symfony DI Service Containerの使い方は?
Db->getInstance()->prepare("some pepared statement");
とロガーは静的メソッド正常です::
Logger::log("Some log massage!");
私はすべてのことを変更したいと私は、これらの2つのサービスをsymfonyのサービスコンテナを実装し、登録された:それは、オブジェクトの呼び出しを持っているので、Dbがシングルトンである
$container->register('Logger', 'Helpers\LogHelpers\LogManager');
$container->register('Db', 'Helpers\ConfigHelpers\Db');
私はこれらのサービスをプロジェクトのすべてのクラスに注入すべきでしょうか、あるいはいくつかのグローバル変数からこれらのサービスを使用する方法はありますか?私はコンテナから静的にサービスを呼び出すことができますが、コンテナを作るのはどういうことでしょうか?私はどこにでも注射するのが非常に複雑に思えるので、これを頼んでいます。もう1つの方法は、すべてのクラスを次のようなLoggerと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は(上記の2番目の例のように)コンテナ自体に定義される依存関係になります。ありがとう! – belijja