2016-05-31 8 views
0

で上書きすることができるようにSilverstripeはインジェクタでクラスを調べる:create()メソッドを使用してクラスはSilverstripeのドキュメントによると、依存性の注入

はあなたに優雅さと簡潔さを追加することができchainabilityを提供コード、例えばPlayer :: create() - > write()。しかし、もっと重要なのは、インジェクタのクラスを参照して、依存性注入によってクラスをオーバーライドできるようにすることです。

「インジェクタのクラスを参照して、クラスが依存性注入によって上書きできるようになる」と説明できる人はいますか?

答えて

1

プレーヤークラスがAnotherClassに依存する場合、AnotherClassのインスタンスをPlayerに渡すことをお勧めします。詳細については、こちらをご覧ください。What is dependency injection?

SilverStripeはDependecy Injection:Injector Classのソリューションをビルドしています。あなたはSilverStripeが使用する正しいクラスを検索します(プレイヤークラスにデフォルト値をが、設定ファイルで上書きすることができます)、それの新しいインスタンスを作成し、その依存関係を注入し、あなたにそれを返すPlayer::create();を呼び出すときにhttps://docs.silverstripe.org/en/3.3/developer_guides/extending/injector/

を参照してください。

あなたがSilverStripeを初めてお使いの場合は、おそらくそれをすべて無視することができます。

4

私はあなたがこれを参照することができると思う:

Injector: 
    MyClass1: 
    class: MyClass2 

上記YMLの設定スニペットはMyClass1::create()が呼び出されたときMyClass2の代わりMyClass1を使用するインジェクター(ほぼすべてのSS」のオブジェクトがインスタンス化されている経由)を教えてくれます。

+0

これは、 'MyClass1 :: create()'によってインスタンス化されるすべてのクラスに適用されますが、フレームワークコードの多くが 'new MyClass1'によって作成されるクラスに対しては適用されません。 –

+0

正しい。 'new MyClass()'は普通の古いPHPです。この構文を "ハイジャック"するのは非常に難しいでしょうから、SSは 'Injector's'' create()'メソッドを思いついています。参考までに、多くの人が見逃している 'createWithArgs()'もあります。 – theruss