我有一個Client
類,它在構造函數中接受具有IConfiguration
接口的對象。構造函數重構中的虛擬方法調用
當創建對象時,應該驗證配置。
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'類成爲'sealed'嗎? – Dmitry
@Dmitry這將如何幫助?誠實的問題。 –
@Dmitry,我可以使'TestClient'成爲密封的,但這裏的問題與'Client'類有關。 – bniwredyc