私は新しいテスターであり、レガシーコードを読んでいる間、次の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));
}