6

私は新しいテスターであり、レガシーコードを読んでいる間、次の2つのクラスがありました。

public class TestCommon : Component
{
    public void Initialize()
    {
        var serviceContainer = (IServiceContainer)this.GetService(typeof(TestFramework));
        serviceContainer.AddService(typeof(TestCommon), this);
    }
}

public class TestFramework : ISite, IServiceContainer
{
    readonly Hashtable services = new Hashtable();
    public TestFramework()
    {
        this.AddService(this);

        var bedrockModuleInstance = (TestCommon)Activator.CreateInstance(typeof(TestCommon));
        ((TestCommon)bedrockModuleInstance).Site = this;
        ((TestCommon)bedrockModuleInstance).Initialize();
    }
}

TestCommonクラスのInitializeメソッドで、GetServiceを呼び出して、どういうわけかTestFrameworkのGetServiceが呼び出されたときに戻ることができる理由がわかりません。コンテナ、コンポーネント、サイトに関するMSDNを読んで理解しようとしましたが、サイトの概念を理解できませんでした。

更新: GetServiceの実装を読み、コンポーネントのGetServiceがサイトのGetServiceを実際に返すことを発見し、私の質問に答えました。

   protected virtual object GetService(Type service) { 
        ISite s = site;
        return((s== null) ? null : s.GetService(service)); 
    } 
4

1 に答える 1

3

答えが見つかりました。GetServiceの実装を読んで、コンポーネントのGetServiceがサイトのGetServiceを実際に返すことを発見し、私の質問に答えました。

protected virtual object GetService(Type service) { 
    ISite s = site;
    return((s== null) ? null : s.GetService(service)); 
} 
于 2012-12-19T01:59:16.827 に答える