[Seasar-s2dotnet 6] Re: S2.NET-1.0.0-beta3 リリース

Hosokawa Hiroyuki hosokawa
2005年 6月 13日 (月) 17:40:21 JST


細川です。

Kazuya Sugimoto wrote:
> ・IS2Container(実際はComponentDefImplのDestroyメソッド)で
>  Destoryメソッドが呼ばれた際に、コンテナに登録されている
>  コンポーネントがIDisposableを実装していれば、Dispose
>  メソッドを呼び出すようにしました。

この機能を試してみたのですが、
S2.NET.Framework.Container.Impl.ComponentDefImpl#Destroy()にて、
  this.ComponentDeployer.Destroy();
  if(this.Component is IDisposable)
  {
    IDisposable disposable = (IDisposable) this.Component;
    disposable.Dispose();
  }
となっていますが、ComponentDeployer.Destroy()をコールするのは
  if(this.Component is IDisposable)
    ・・・
  }
の後のような気がするのですが、如何でしょうか。

以下、試した内容です。間違っている様でしたら指摘して頂けたら
有難いです。

・環境 S2.Net 1.0.0-beta2のサンプル+S2.Net 1.0.0-beta3
・サンプルのLogic1ImplでIDisposableをインプリメントして
  Disposeを実装。
・StartSample1にて、以下のようにInit()とDestory()を追加。
    IS2Container container = S2ContainerFactory.Create(PATH);
    container.Init();
    StartSample1 sample1 = (StartSample1)     
        container.GetComponent(typeof(StartSample1));
    sample1.Execute();
    Console.ReadLine();
    container.Destroy();
・上記サンプルを実行すると、container.Destroy()実行後に再度Logic1Implを
  生成した後にLogic1ImplのDispose()が呼ばれます。

よろしくお願いいたします。



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