[seasar-dotnet:161] IS2Container.Registerで登録すると自動バインディングされないことがある

Toru Uetani goodspeed @ mail.name
2006年 4月 1日 (土) 00:03:02 JST


お世話になっております、上谷です。

Seasar1.1.1を.NET2.0用に修正したものを使っているときに件名の現象にあいま
した。

ITopインターフェイスはIMiddleインターフェイスを表すプロパティを持ちます。
IMiddleインターフェイスはIBottomインターフェイスを表すプロパティを持ちます。

diconファイルでIMiddleインターフェイスの実装クラスをコンテナに格納し、
1.IBottomインターフェイスの実装クラスをIS2Container.Registerで登録
2.ITopインターフェイスの実装クラスをIS2Container.Registerで登録
とした場合、
1.IMiddle.Bottomは取得できない
2.ITop.Middleは取得できる
となります。

diconファイルを書くときはあまり依存関係を気にしないでも取得できたように
思いますが、
IS2Container.Registerの場合は依存関係を考慮しないと取得できないのでしょ
うか?
それとも何か勘違いをしているのでしょうか?ご教授の程お願いします。


以下MSTestを使用したテストコードです。

-- app.dicon ---------------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components>
<component class="TestProject1.MiddleImpl"/>
</components>

-- テストコード ------------------------------------------------

[TestClass]
public class Test {
    [TestInitialize()]
    public void SetUp() {
        SingletonS2ContainerFactory.ConfigPath = this.GetType().Namespace + ".app.dicon";
        SingletonS2ContainerFactory.Init();
    }
    [TestCleanup()]
    public void TearDown() {
        SingletonS2ContainerFactory.Destroy();
    }
    [TestMethod()]
    public void Test1() {
        SingletonS2ContainerFactory.Container.Register(typeof(TestProject1.BottomImpl));
        IMiddle obj = (IMiddle)SingletonS2ContainerFactory.Container.GetComponent(typeof(IMiddle));
        Assert.IsNotNull(obj.Bottom);//失敗
    }
    [TestMethod()]
    public void Test2() {
        SingletonS2ContainerFactory.Container.Register(typeof(TestProject1.TopImpl));
        ITop obj = (ITop)SingletonS2ContainerFactory.Container.GetComponent(typeof(ITop));
        Assert.IsNotNull(obj.Middle);//成功
    }
}


-- 
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏
            
 ┏━━━┓ 上谷 徹(Toru Uetani)
 ┃\_/┃ mail:goodspeed @ mail.name
 ┗━━━┛ 
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏



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