У меня есть класс Client
, который принимает объект с интерфейсом IConfiguration
в конструкторе.Виртуальный вызов метода в конструкторе refactoring
Конфигурация должна быть подтверждена при создании объекта Client
.
public interface IConfiguration
{
int ReconnectDelay { get; }
}
public class Client
{
public Client(IConfiguration configuration)
{
if (configuration.ReconnectDelay < 60000)
{
throw new ConfigurationErrorsException();
}
}
}
Для тестирования я нужен клиент с ReconnectDelay
собственности установлен на значение, которое меньше, чем действительный.
Вот мое текущее решение:
public class Client
{
public Client(IConfiguration configuration)
{
ValidateConfiguration(configuration);
}
protected virtual void ValidateConfiguration(IConfiguration configuration)
{
if (configuration.ReconnectDelay < 60000)
{
throw new ConfigurationErrorsException();
}
}
}
public class TestClient : Client
{
public TestClient(IConfiguration configuration)
: base(configuration)
{
}
protected override void ValidateConfiguration(IConfiguration configuration)
{
}
}
Он работает, но вызывает вызов виртуального метода в конструкторе, что плохо (я знаю, что сейчас это не принесет никакого вреда, но я хочу, чтобы исправить это в любом случае).
Итак, есть ли элегантное решение для этого?
Можете ли вы сделать класс «TestClient» «запечатанным»? – Dmitry
@Dmitry Как это поможет? Честный вопрос. –
@Dmitry, я могу сделать «TestClient» запечатанным, но проблема здесь в классе 'Client'. – bniwredyc