2012-02-13 104 views
1

我使用優秀的OpenIso8583Net發送/接收ISO消息。但是,由於每個組織都有自己的定義和定製,我希望能夠儘可能少地接觸項目源,以便能夠更輕鬆地升級到新版本。
所以這裏有三個自定義我面對現在:擴展/修改OpenIso8583.Net

  • 我怎樣才能讓Bitmap使用AsciiFormatter代替BinaryFormatter?由於位圖是AMessage類的私有字段,因此即使直接從AMessage派生新的自定義類,我也無法訪問它。構造函數默認使用BinaryFormatter。目前,我已修改Bitmap.cs無參數構造函數以使用AsciiFormatter
  • 對於可變長度格式化程序也是如此。它默認使用AsciiFormatter。但我希望它使用BcdFormatter。我已經修改了這部分,默認在VariableLengthFormatter中使用BcdFormatter
    如果有人向我展示了通過擴展而不是修改來處理這些自定義的更好方法,我將不勝感激。
  • 假設我想在日誌文件中顯示字段。一個例子就是我在Fields部分的Generating MAC by encrypting data顯示的內容。現在,我必須做出Template財產公開,並使用下面的代碼片段: 爲(VAR I = 2;我

我如何可以訪問域未做Template公共我想訪問Display方法進行日誌記錄在我的主程序領域。

回答

4

我剛纔提出變更項目,讓這一點。隨着0.5.0版本(更新您的NuGet包)

位圖格式化

您可以在模板中爲您的消息類設置位圖格式器。下面是一些示例代碼:場

static AsciiIso()方法

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) 
    { 

    } 
} 

設定長度格式化,如果以這種方式改變,你會改變場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] 
+1

感謝約翰。與這個項目很好的合作。我只是喜歡它:) – Kamyar 2012-02-17 14:02:18

+0

只注意到FieldDescriptor的'LengthFormatter'沒有setter。我已經手動添加了setter,直到更新源代碼。謝謝。 – Kamyar 2012-02-18 08:15:16