Наш продукт имеет SDK и часть времени выполнения.SDK динамически загружает dll времени выполнения, чтобы мы могли отправлять улучшения времени выполнения без перекомпиляции старых приложений.
У меня есть интерфейс в библиотеке sdk, mysdk.dll, MyInterface1
.Фактическая реализация - MyClass1
в myruntime.dll.
Теперь я хочу добавить новый метод foo
в MyInterface1
и использовать во время выполнения код myruntime.dll.Однако старые приложения ломаются, так как старые MyInterface1
не имеют foo
.Как правильно расширить MyInterface1
, не ломая старые приложения?
Я думал о добавлении другого интерфейса MyInterface2
, унаследованного от MyInterace1
, и использовании obj is MyInterface2
или просмотре поля version
в MyInterface1
.Однако во время выполнения это снова не выполняется, поскольку MyInterface2
отсутствует в более старом SDK.
Как правильно расширить интерфейс общедоступного SDK, чтобы старые приложения по-прежнему работали?
Iсчитаю, что эта проблема распространена на всех языках.