Код: Выделить всё
public partial class StiReport
{
...
public void ExportDocument(StiExportFormat exportFormat, StiExportService exportService, Stream stream, StiExportSettings settings)
Так, логично?
Дальше:
Код: Выделить всё
switch (exportFormat)
{ ...
case StiExportFormat.RtfTable:
if (exportService != null && (!(exportService is StiRtfExportService)))
throw new ArgumentException("The incorrect type of the 'exportService' argument is used. The StiExportService must have same type of export as declared in exportFormat argument.");
Непонятно зачем, но ok - делаем кастомный сервис - наследник StiRtfExportService.
Но дальше следует прекрасное:
Код: Выделить всё
var rtf1service = exportService as StiRtfExportService;
if (rtf1service == null) rtf1service = new StiRtfExportService();
rtf1service.ExportRtf(this, stream, settings as StiRtfExportSettings);
Т.е. что бы я не передал в качестве сервиса экспорта, пойдёт выполнение кода из стандартного StiRtfExportService.ExportRtf()
И так - абсолютно для каждого формата.
Вопрос 1 - в чём смысл этого метода, если передаваемый сервис экспорта игнорируется вызовом НЕвиртуального метода базового класса?
Вопрос 2 - как мне обойти это ограничение и таки использовать свой сервис экспорта?