[s2container-php5:49] 【質問】FileSystemComponentAutoRegisterについて
Yoshinari Ueyama
ueyama @ gmail.com
2006年 9月 27日 (水) 17:48:58 JST
植山です。
また質問させてください。今度はS2Container.PHP5についてです。
s2container.php5のexample/dicon/autobinding/配下のファイルを修正して、
FileSystemComponentAutoRegisterを使用するサンプルを作ってみました。
で、下記のようにファイルの検索対象ディレクトリを2つ(test1,test2)設定
したところ、エラーが発生しました。
メッセージ内容から察するに、HashMapImplクラスを2度登録してMap
インターフェースをキーとしてgetComponent()が実行されたためにエラー
となった模様です。
私のdiconファイル記述内容に誤りがありますでしょうか?
FileSystemComponentAutoRegisterを使用する際に何らかの制約事項があるの
でしょうか?
教えてください。よろしくお願いします。
以上です。
---------【以下、参考】------
----[ファイルの構成]----
helloworlderror/
index.php
xxxxx.dicon
components21.dtd
(略)
test1/
Map.class.php
HashMapImpl.class.php
test2/
(ファイルなし)
-------[使用したdiconファイル]---------
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"components21.dtd">
<components>
<component class="S2Container_FileSystemComponentAutoRegister">
<property name="instanceMode">"singleton"</property>
<initMethod name="addClassPattern">
<arg>"%APP_BASE_PATH%/test1"</arg>
<arg>".+Impl"</arg>
</initMethod>
<initMethod name="addClassPattern">
<arg>"%APP_BASE_PATH%/test2"</arg>
<arg>".+Impl"</arg>
</initMethod>
<initMethod name="registerAll"/>
</component>
<component autoBinding="auto" class="AutoHelloSetterInjection"/>
</components>
-----[実行したコード]-----
(略)
require_once('Hello.class.php');
require_once('test1/Map.class.php');
require_once('test1/HashMapImpl.class.php');
require_once('AutoHelloSetterInjection.class.php');
$PATH = APP_BASE_PATH . "/AutoHelloSetterInjectionError.dicon";
$container = S2ContainerFactory::create($PATH);
$container->init();
$hello = $container->getComponent('Hello');
$hello->showMessage();
----[出力されたエラーメッセージ]----
*Fatal error*: Uncaught exception
'S2Container_TooManyRegistrationRuntimeException' with message 'Two or more
components<HashMapImpl, HashMapImpl> are registered in Map' in
/home/ueyama/lib/s2container.php5/build/s2container.php5/S2Container/S2Container_TooManyRegistrationComponentDefImpl.class.php:64
Stack trace: #0
/home/ueyama/lib/s2container.php5/build/s2container.php5/s2container.core.classes.php(119):
S2Container_TooManyRegistrationComponentDefImpl->getComponent() #1
/home/ueyama/lib/s2container.php5/build/s2container.php5/s2container.core.classes.php(2004):
S2ContainerImpl->getComponent('Map') #2
/home/ueyama/lib/s2container.php5/build/s2container.php5/s2container.core.classes.php(1624):
S2Container_AutoPropertyAssembler->assemble(Object(AutoHelloSetterInjection))
#3
/home/ueyama/lib/s2container.php5/build/s2container.php5/s2container.core.classes.php(1607):
S2Container_SingletonComponentDeployer->_assemble() #4
/home/ueyama/lib/s2container.php5/build/s2container.php5/s2container.core.classes.php(1629):
S2Container_S in *
/home/ueyama/lib/s2container.php5/build/s2container.php5/S2Container/S2Container_TooManyRegistrationComponentDefImpl.class.php
* on line *64
*
--
------------------------------------------------------------------
植山 能成@福岡
mailto:ueyama @ gmail.com
------------------------------------------------------------------
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/s2container-php5/attachments/20060927/e8798a23/attachment.html
S2Container-PHP5 メーリングリストの案内