Верните ваши основные плагины в интерфейс, скажем, IResult, который имеет ваши возвращаемые значения и статус ошибки. Передайте статусы ошибок в ваши плагины Post через конструктор или как часть подписи метода контракта и позвольте вашему плагину решать, работает он или нет.
В противном случае кажется, что само приложение принимает решение о том, запущены ли плагины или нет, и это противоречит цели всей архитектуры плагина.
Несмотря на это, это больше похоже на то, что здесь происходит обработка событий перед запуском, поэтому почему бы просто не настроить события, на которые могут подписываться ваши плагины, и логически сгруппировать предварительную, базовую и постобработку плагины. Тогда они могут поддерживать свое собственное внутреннее состояние и решать, когда запускать постобработку, основываясь на успехе или неудаче вашей базовой обработки.