[Seasar-user:2071] Re: injectDependencyについて

YOKOTA Takehiko takehiko
2005年 6月 1日 (水) 14:54:49 JST


横田です。

Koichi Kobayashi wrote:
> 小林 (koichik@休日) です.

議論につきあわせてしまってすみません。おかげで分からなかった点が次第に
分かるようになってきました。

>>おっしゃることは分かりますが、今回のケースでは効率を良くするために機能を
>>制限しているわけで、それが必ずしも良いかというとそうでないと自分は思いま
>>す。
> 
> 機能そのものが制限されているわけではないと思いますが...

確かにregisterを使えば実現は可能なので、機能制限とはちょっと違いますね。
すいません。

> 「事前にコンポーネントを定義できない」&「インスタンス生成を S2 が行う」
> なら実行時に register() して getComponent() だし,
> 「事前にコンポーネントを定義できない」&「インスタンス生成を外部で行う」
> だったら実行時に register() して injectDependency().

知りたかったのはこの辺の実現方法でした。別メールでひがさん自身もこの方法
を肯定していらっしゃいますので、これが(少なくとも現時点での)S2の世界で
の一般的な実現方法ということで理解します。

#ちなみにさらに言えばdiconファイルなしに空のS2Containerを生成してそこに
#全てのcomponent定義をregisterしたかったり、既存のS2Containerからcomponent
#定義をunregisterしたかったりもします。そこまで現時点のS2の機能で実現でき
#るのかは未調査ですが。^^;

> 曖昧な状況では確実に動かない方がより望ましいと私は考えます.

この辺はポリシーなんでしょうね。私も小林さんと同じように考えるケースも
ありますし、そうでないケースもあります。今回は私の持つニーズを併せて
考慮した上で、outerなしでもinjectDependencyできた場合の利便性が定義ミ
スによる不具合発生のデメリットを上回るかなと考えましたが、このあたりは
あくまで主観です。特に、

> 実行時まで未知のコンポーネントを扱いたいという事であれば,明示的に
> register() すればよいだけですので.

という代替手段が存在することを知らなかったということもあります。この
方法でできるということであれば、小林さんのおっしゃるような「曖昧なら動
作させない」というポリシーをinjectDependencyに適用している現状は望まし
い状態なのかもしれません。

> そうじゃなくて,コンポーネントを「未定義のまま」DI したいという
> 要件があるのであれば検討する必要があるかも.

すいません、ちょっと意味が分からないのですが「未定義のままDIしたい」
とは具体的にはどういうことでしょうか。

> 「実行時に定義する」と「定義しない」は全然違いますから.
> どっちなんでしょう?

ちなみに私のケースでは「定義したくてもできない」という感じですので、
injectDependencyの直前に定義してregisterすればそれで済みそうです。


-- 
YOKOTA Takehiko
  [E-MAIL ADDRESS DELETED]



Seasar-user メーリングリストの案内