以下の私のコードを考えると、最初の WebTestingApp コンストラクターが新しいインスタンスを返す前に 2 番目のコンストラクターを呼び出す方法はありますか? コンストラクターにいくつかの読み取り専用フィールドを設定したいのですが、コピー/貼り付けを除いて、どうすればよいかわかりません。
答えはコンストラクターチェーンと関係があると思いますが、2番目の WebTestingApp コンストラクターが暗黙的に base() を呼び出すため、その方法がわかりません (クラスの外部ユーザーが持つべきではないため、これは重要です) IRemoteFile および IWebServiceGateway インスタンスを提供します)。
internal WebTestingApp(Result result, BrowserApp browserApp, IRemoteFile remoteFile, IWebServiceGateway webServiceGateway) : base(remoteFile, webServiceGateway)
{
// TODO: Need to invoke WebTestingApp(Result result, BrowserApp browserApp)
}
public WebTestingApp(Result result, BrowserApp browserApp)
{
// Set readonly vars here
}
基本クラス TestingApp のコンストラクターは次のとおりです。
protected TestingApp() : this(S3File.Instance, WebServiceGateway.Instance) { }
internal TestingApp(IRemoteFile remoteFile, IWebServiceGateway webServiceGateway)
{
this.remoteFile = remoteFile;
this.webServiceGateway = webServiceGateway;
}
WebTestingApp は TestingApp から派生しています。S3File と WebServiceGateway はシングルトンです。