0

私は symfony が依存性注入をどのように行うかを調べてきました。しかし、私はその直接的な目的を理解していません。

すべてをサービスと呼んでいるようです。サービスは、構成されたルーターに沿ったものです。これらのサービスのほとんどには、開始に必要な一連の変数のベースラインがあります。しかし、「isShared」と呼ばれるメソッドがあります。

そのメソッドを使用すると、既に作成されたオブジェクトではなく、新しいオブジェクトが作成されると思います。

しかし、作成するオブジェクトがまったく別の変数を必要とする場合はどうなるでしょうか?

class foobarClass
{
    public function __construct($config.foo)
    {
        //
    }
}

$container = new sfContainerBuilder(array('config.foo' => 'bar'));

$container->register('foobar','foobarClass')
          ->addArgument('%config.foo%')
          ->isShared(false);

config.foo は bar ではなく foo であるべきですか? 基本的にすべての可能な構成に対して別の定義を作成する必要がありますか (奇妙で、DIC の目的を無効にしているようです)。

また、依存性注入と逆制御の主な違いは何ですか? いつ、どこで、何を、何に使うのか?

前もって感謝します!

編集:

パラメータの問題に関する別の例:

class Files
{
    protected $_path;

    public function __construct($path)
    {
        $this->_path = $path;
    }
}

$container = new sfContainerBuilder(array('path.to.something' => '/some/path/file.abc'));

$container->register('files','files')
          ->addArgument('path.to.something')
          ->isShared(false);

必要に応じて新しいパスを指定するにはどうすればよいですか? 定義にはすでに path.to.something があります。しかし、path.sto.somethingElse を持つオブジェクトが必要な場合はどうすればよいでしょうか?

4

1 に答える 1

0

Symfony2 では、サービスは通常のクラスであり、クラスの継承は必要ありません。
目的は、オブジェクトの開始を気にする必要がないことです。
非常に小さなアプリケーションでは必要ないように見えますが、いくつかのオブジェクト間に依存関係がある場合、問題になる可能性があります。例: 次の関係を持つ 4 つのオブジェクトがあります:
B -needs-> A、C -needs-> A、D -needs-> B & C

現時点では、各クラスの内部ではなく開始を構成するのが非常に便利です。代わりに、(この場合) services.xml / services.yml に記述します。

このコンテキストでは、制御の反転が使用されることがありますが、より一般的です。ただし、この場合、オブジェクトの外部で開始を処理するため、制御の反転 (依存性注入) も行われます。

あなたの他の質問に:

config.foo は bar ではなく foo であるべきですか?

コンストラクターではなくパラメーターを渡すことができます。別の関数で渡すことができます。本当に何度も引数が必要であるが、柔軟性も必要な場合の別の解決策は、親サービスの両側 (DI とクラス) で継承を使用することもできます。

しかし、最初は、mailer例とともにこれを読むことをお勧めします。それは本当に簡単です: http://symfony.com/doc/current/components/dependency_injection/introduction.html その後、さまざまなタイプのインジェクションに関する次のページに進むことができます。など

于 2013-04-25T21:52:12.823 に答える