1

ISO メッセージの送受信に優れたOpenIso8583Netを使用しています。ただし、すべての組織には独自の定義とカスタマイズがあるため、新しいバージョンに簡単にアップグレードできるように、プロジェクトのソースにできるだけ触れずに形式をカスタマイズできるようにしたいと考えています。
そこで、私が今直面している 3 つのカスタマイズを次に示します。

  • の代わりにBitmap使用するにはどうすればよいですか? bitmap はクラスのプライベート フィールドであるため、新しいカスタム クラスを から直接派生させてもアクセスできません。そして、コンストラクターはデフォルトで使用します。現在、 Bitmap.cs パラメーターなしのコンストラクターを使用するように変更しました。 AsciiFormatterBinaryFormatterAMessageAMessageBinaryFormatterAsciiFormatter
  • 同じ話が可変長フォーマッタにも当てはまります。デフォルトで使用AsciiFormatterします。でも使ってみたいBcdFormatter。この部分をBcdFormatterVariableLengthFormatter でデフォルトで使用するように変更しました。
    変更ではなく拡張することで、これらのカスタマイズを処理するより良い方法を誰かが教えてくれれば幸いです。
  • ログ ファイルのフィールドを表示するとします。例として、「データを暗号化して MAC を生成する」Fieldsセクションで表示したものがあります。今、私はTemplateプロパティを公開し、次のスニペットを使用する必要があります: for (var i = 2; i

Template公開せずにフィールドにアクセスするにはどうすればよいですか? Displayログの目的で、メイン プログラムのフィールド のメソッドにアクセスしたいと考えています。

4

1 に答える 1

4

これを許可するようにプロジェクトに変更を加えました。バージョン 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)
    {

    }
}

フィールドの長さフォーマッターを設定する

この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]
于 2012-02-17T10:40:07.277 に答える