[Seasar-s2dotnet 59] Re: S2.NET-1.0.0-beta7リリース

Kazunori Satoh kazz2
2005年 8月 6日 (土) 01:20:01 JST


 こんばんわ。佐藤です。


> S2.NET-1.0.0-beta7を試してみたのですが、App.configでのアセンブリ
> 登録で不明点がありましたのでメールしました。
> 
> 例えば、Hoge.exeのApp.configで以下のようにアセンブリを指定したと
> します。
> <configSections>
>     <section name="s2dotnet" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
> </configSections>
> <s2dotnet>
>     <add key="configPath" value="HogeApp/App.xml" />
>     <add key="assembly" value="HogeAppLogic" />
>     <add key="assembly" value="CommonLogic" />
> </s2dotnet>
> 
> プログラムを実行するとdiconの<component>にてHogeAppLogic内の
> クラスを指定している部分でエラーになります。
> 
> S2ContainerFactory.Create(string path)の中段部分
> string[] assemblys = config.GetValues(ContainerConstants.CONFIG_ASSEMBLY_KEY);
> では最後の「CommonLogic」のみが取得出来、「HogeAppLogic」は取得出来ていないよ
> うです。(最後の1つのみが取得出来る)
> 

 私も試してみましたが同様の現象が発生しますね。

 原因は細川さんも書いている通り、コード中の

 ConfigurationSettings.GetConfig(ContainerConstants.S2DOTNET_CONFIG);

 の戻り値であるNameValueCollectionに"assembly"というkeyで格納されている
 文字配列の要素がなぜか最後に指定したvalueだけしかセットされないのが
 原因です。

 NameValueCollectionは一つのキーに複数の文字列を格納できるコレクションで
 ありそれ単体では複数の文字列を格納できるはずですが不思議といろいろな所
 で散見される同ハンドラのクラスでは同一のキーを指定している例を見たこと
 がありません。

 となるとこれはセクションハンドラである
 System.Configuration.NameValueSectionHandlerの問題か制限ではないで
 しょうか。

 同クラスに問題か制限があるのであればIConfigurationSectionHandlerを
 実装したカスタムハンドラクラスを使うほうが良いかもしれませんね。

************************************************************************
* Kazunori Satoh <kazz2 @ joy.hi-ho.ne.jp_NOSPAM>
* http://d.hatena.ne.jp/Kazzz/
*
**




seasar-dotnet メーリングリストの案内