Цитата:
Сообщение от
fed
А то я вот совсем не понимаю, ЗАЧЕМ было делать такую мелкогранулированную систему, а потом ее же наглухо закрывать от расширений...
Понятно зачем закрывают для расширений - чтобы не поддерживать точки расширения которые могут быть никому не нужны. Если все-таки нужны, есть возможность сделать extensibility request.
Вот, например, сделали вы метод
X++:
public void test(str _arg)
И хочется добавить параметр:
- добавить обязательный параметр - breaking change (может быть вызов из расширения)
- добавить необязательный параметр - breaking change (может быть обернут расширением)
- добавить новый метод с дополнительным параметром можно, но прекратить вызывать старый метод - breaking change (на вызов может быть подписано расширение, котрое перестанет работать)
- можно использовать disposable context, это приемлемо, но ломает рекурсию.
Решения:
- Hookable(false) - если надо чтобы можно было подписаться на метод, то сделать отдельное событие (это не блокирует создание нового метода, вызывающеего то же событие)
- Передавать аргументы при помощи класса (как в дотнете события сделаны XXXEventArgs) - добавление свойства в класс это не breaking change
- Продумывать для каких сценариев нужны расширения, а для каких нет