リクエストパラメータのインジェクションのまとめ
- 動機
- setterを書くのが面倒である
- setterなしのインジェクション問題
- DIによって設定した値をリクエストパラメータで上書きしてしまう可能性がある
- 仕様
- setterがある場合はsetterが優先する
- 値がオブジェクトの場合は参照を代入する
- 「_」アンダースコアで始まっているプロパティはインジェクト対象外にする
- プロパティの値が「null」の場合のみインジェクトする
- プロパティが指定されず、setterのみでも有効とする
パターン1
property:指定あり
setter :指定あり
単純にsetterをコールするのみ。setterの実装に任せる。
パターン2
property:指定あり
setter :指定なし
リクパが「_」アンダースコアで始まっていない、かつリクパの値がnullでない場合にインジェクトする
パターン3
property:指定なし
setter :指定あり
単純にsetterをコールするのみ。setterの実装に任せる。
パターン4
property:指定なし
setter :指定なし
何もしない
以上はリクエストパラメータとアクションクラスのプロパティ名が同じ場合に
自動的にインジェクトされる仕様(パッシブ(受動)ネガティブインジェクションと呼ぶ)である。
ユーザによっては、自分の意志を反映したい場合もあると思われるので
maple.iniの[Action]セクションでインジェクトするリクエストパラメータを
指定する仕様(アクティブ(能動)インジェクトション)はどうするか?
これが実装されるなら優先度はパッシブネガティブインジェクションよりも優先される。
- > 私的には、ConvertフィルタやinjectSessionフィルタ等でできることでも
Actionフィルタで一発指定できるようにすることはよいと思ってます。
GUIとかでよくありますよね?
一つのことをするのに複数のやりかたがあるという考え方です。
(実装的には複雑になってしまのが問題なんですが・・・)
inject〜フィルタについは
http://bobchin.ddo.jp/wiki/index.php?cmd=read&page=maple%2F%B4%B6%C1%DB#content_1_5
に書いたようにinjectフィルタにしてしまったほうが見やすいような気がしていますが・・・