Учитывая мой код ниже, существует способ, которым первый конструктор 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 являются одиночными.
Я не уверен, что это сработает? Не попытается ли он вызвать WebTestingApp (Result, BrowserApp) с экземплярами IRemoteFile и IWebServiceGateway? –
Я неправильно понял ваш вопрос. Извиняюсь. Изменит мой ответ. –
Отредактировал мой, затем увидел, что вы придумали то же самое. Ну ладно, рад, что ты отсортирован ... –