規約重要

MapleのActionはリクエストパラメータを自動的にインジェクションしたり、設定ファイルに「ref:xxx」とかけばDIContainerに入っているオブジェクトをインジェクションしたりするが、ちょっとまどろっこしいところがあるように思えてきたのでちょっと整理したいと思う。

まず、現状インジェクションするために「メンバ変数」と「setter」を準備しないといけないことになってるが、setterだけでいいかなと思ってます。オブジェクトのメソッドをとってきて、「setXXXX」ってなっていたらとりあえず何かを受け取ろうとしてるんだなってことでいいかなと。

で、「setXXX」の「XXX」に関して、その名前のものが「リクエスト」「セッション」「DIできるもの」にある場合に、以下の順番で評価していくということで。優先順位の高いものがあれば、そこで評価終了すれば、DIするためにまっているものにリクエストパラメータがはいってくるってこともないかなと。あと、セッションで引き継いでるものもリクエストパラメータより優先でインジェクションでいいかなと。

  1. DIできるもの
  2. セッション
  3. リクエス

DIに関しては、現状「dicon.ini」で別名をつけて、その別名を「ref:xxx」という形でmaple.iniに書くが、この「ref:xxx」の部分が「setXXX」と同じなら、省略可能ということでいこうかと。逆に言えばそれを合わせておけばわざわざ書かなくていいよと(ようやく「規約重要」にたどり着いた・・・)

こうすれば、maple.iniにActionフィルターのセクションを書くことはかなり減るかな。

逆になにもインジェクションしてほしくない「setXXX」のために、以下のようなものを準備した方がいいかなと思っています。

[Action]
count = noinject:

インジェクションしないでということを表せればいいので「ref:」ではなくて「noinject:」ということで。

とかいていたら、リクエストパラメータとセッションを透過的に扱える必要があるかもとおもってきたぞ。それはまた別に書こう。

追記 そういえばbobchinさんが以前InjectRequestとInjectSessionが二つあるのがどうかと思う的な指摘をうけてましたね。コンポーネントクラスに対するインジェクションも同等のルールを適用になるかな。