Расширение / изменение OpenIso8583.Net

Я использую отличный OpenIso8583Net для отправки / получения сообщений ISO. Однако, поскольку каждая организация имеет свое собственное определение и настройку, я хочу иметь возможность настраивать формат с минимальным прикосновением к источнику проектов, чтобы иметь возможность более легко обновляться до новых версий.
Итак, вот три настройки, с которыми я сталкиваюсь сейчас:

  • Как я могу сделать Bitmap использовать AsciiFormatter вместо BinaryFormatter? поскольку растровое изображение является частным полем AMessage класс, я не могу получить к нему доступ, даже если я напрямую получаю новый пользовательский класс из AMessage, И конструктор использует BinaryFormatter по умолчанию. В настоящее время я изменил конструктор Bitmap.cs без параметров, чтобы использовать AsciiFormatter,
  • Та же самая история идет для форматера переменной длины. Оно использует AsciiFormatter по умолчанию. Но я бы хотел использовать BcdFormatter, Я изменил эту часть, чтобы использовать BcdFormatter по умолчанию в VariableLengthFormatter.
    Я был бы признателен, если бы кто-нибудь показал мне лучший способ обработки этих настроек путем расширения, а не изменения.
  • Предположим, я хочу отобразить поля в файле журнала. Примером может служить то, что я отобразил в разделе " Генерация MAC" путем шифрования данных в Fields раздел. Прямо сейчас я должен сделать Template свойство public и используйте следующий фрагмент: for (var i = 2; i

Как я могу получить доступ к полям, не делая Template общественности? Я хочу получить доступ к Display метод полей в моей основной программе для целей регистрации.

1 ответ

Решение

Я только что внес изменения в проект, чтобы позволить это. Начиная с версии 0.5.0 (обновите свой пакет NuGet)

Растровое форматирование

Вы можете установить форматирование растрового изображения в шаблоне для вашего класса сообщений. Вот пример кода:

public class AsciiIsoMsg : Iso8583
{
    // First you need to customise the template
    // The message 
    private static readonly Template template;

    static AsciiIsoMsg()
    {
        // Get the default template for the Iso8583 class
        template = GetDefaultIso8583Template();
        // change the bitmap formatter
        template.BitmapFormatter = new AsciiFormatter();
    }

    // override the base class using the template and you will be using the bitmap formatter
    public AsciiIsoMsg():base(template)
    {

    }
}

Задать длину Formatter поля

в static AsciiIso() Метод, если вы измените таким образом, вы измените поле 2 для использования форматера длины BCD:

// Set field 2 to use BCD formatter
template[2] = FieldDescriptor.BcdVar(2, 19, Formatters.Bcd);

Журнальный файл

Чтобы отобразить сообщение в файле журнала, используйте .ToString() метод класса сообщения, например

var msg = new AsciiIsoMsg();
msg.MessageType = Iso8583.MsgType._0200_TRAN_REQ;
msg[3] = "010000";
Console.WriteLine(msg.ToString());

Который дает:

0200:
   [Fixed    n         6 0006] 003 [010000]
Другие вопросы по тегам