Я пытаюсь реализовать интерфейс с некоторыми базовыми функциями для изменения настроек BIOS от нескольких поставщиков компьютеров.
Пока у меня есть следующее:
public interface IBiosConfigurator
{
bool IsBiosPasswordSet();
bool ValidateBiosPassword(string password);
bool SetBiosPassword(string currentPassword, string newPassword);
T GetSetting<T>(string settingName, string password);
T GetSetting<T>(string settingName, string propertyName, string password);
bool SetSetting<T>(string settingName, T value, string password);
}
Однако я быстро понял, что это не соответствует тому, что мне нужно:
Если что-то не получается, я понятия не имею, почему. Был ли это плохой пароль? Значение, которое вы пытаетесь установить, не разрешено? Имя настройки не существует?
У каждого производителя есть свой способ отображения ошибок: одни используют целые, другие используют, другие - нет общего типа.
Даже простые методы, такие как bool IsBiosPasswordSet()
, могут потерпеть неудачу, и это не учитывается.
Единственный способ подумать о том, чтобы смягчить тот факт, что каждый производитель имеет свой собственный способ установки ошибок (и разных ошибок для каждого поставщика), - это создать enum BiosErrorCode
и попытаться сопоставить коды поставщиков со списком, который я веду для каждого класса. реализации IBiosConfigurator
.
Но мне все еще нужно возвращать фактический код ошибки, который что-то сгенерировал, и хотя мне кажется, что это нормально для объявления метода:
BiosErrorCode GetSetting<T>(string settingName, string password, out T value)
Я не могу сказать то же самое для:
BiosErrorCode IsBiosPasswordSet(out bool passwordSet);
Но единственный другой способ решить эту проблему - это свойство BiosErrorCode LastErrorCode
, которое позволило бы мне сохранять декларацию методов такой, какая она есть, но немного похоже на PInvokes ...
Итак, я думаю, у меня есть два вопроса:
- Кто-нибудь может придумать лучший способ сделать это?
- Если нет, то более уместно использование свойства
out params
или BiosErrorCode
?