[Seasar-s2dotnet 94] Patch Request: S2Container.NET 1.00-RC1における正常系での例外の利用について

菊池 和彦 kazuk
2005年 11月 12日 (土) 16:22:27 JST


菊池です

 そんなわけで .NET Framework 2.0 上で動かそうと弄っているのですが
(殆ど動いてる模様です。)
 .NET Framework 1.1上でも修正したほうが良いと思える部分を2点程
見つけましたので Patch Request します。

 とりあえず全ての例外をデバッガで止める用にして動かしていて気が
付いた以下の点

Seasar.Framework.Xml.TagHandlerContext の
 IncrementPathCount

 修正理由:正常経路中での例外の利用

Before
        private int IncrementPathCount()
        {
            string path = this.Path;
            int pathCount;
            try
            {
                pathCount = (int) pathCounts_[path];
                pathCount++;
            }
            catch(NullReferenceException)
            {
                pathCount = ONE;
            }
            pathCounts_[path] = pathCount;
            return pathCount;
        }

After
        private int IncrementPathCount()
        {
            string path = this.Path;
            int pathCount=0;

            if (pathCounts_[path] != null)
            {
                pathCount = (int)pathCounts_[path];
            }

            pathCount++;
            pathCounts_[path] = pathCount;
            return pathCount;
        }

その2

 あと、Seaser.Famework.Container.Assembler.AutoPropertyAssemblerの
Assemble が S2ContainerImpl.GetComponentDef から頻繁に例外を貰っている
ので、これも例外の正常ケースでの利用にあたるのではと思います。
 TryGetComponent を IS2Container に追加して、見つからない場合にnullを
返し例外を投げないようにし、それを利用するようにすると動作に影響は無く
例外が発生しないように修正できました。

 上記2点の修正で Examples を動かす上では ManifestResourceが気に入らない
と言ってくる1回の例外のみになりました。

 2点目はインターフェースにメソッド追加が必要で、仕様面に話が及んでしまう
ので精査願えればと思います。

--
 Kazuhiko Kikuchi <kazuk @ agate.plala.or.jp>
  Microsoft Most Valueable Professional (MSMVP) - Visual C# 2004



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