Учитывая мой код ниже, есть ли способ, которым первый конструктор WebTestingApp может вызвать второй перед возвратом нового экземпляра? Я хочу установить в конструкторе несколько полей только для чтения, и, если не считать копирования / вставки, я не вижу, как это сделать.
Мне кажется, что ответ будет связан с цепочкой конструктора, но я не могу понять, как это сделать, поскольку второй конструктор 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 являются одиночными.