2012-09-11 56 views
1

我有一個處理自定義消息格式的工廠。系統中定義了幾種基於此格式的不同消息集。我正試圖重構消息處理代碼,以便消息設置與工廠「自動註冊」。這將允許我們僅在系統的各個部分中包括所需的消息集,並且還允許添加消息集而不影響現有的代碼。專業工廠自動註冊

註冊的主要工廠類如下。

public class MessageFactory 
{  
    internal static List<FactoryListEntry> _seriesFactories = new List<FactoryListEntry>(); 

    public static void RegisterSeriesFactory(long seriesId, ushort seriesVersion, 
               ISeriesFactory factory) 
    { 
     MessageFactory._seriesFactories.Add( 
      new FactoryListEntry(seriesId, seriesVersion, factory)); 
    } 
} 

獨特系列的自動註冊類看起來像這樣。

public class Series1AutoRegistration 
{ 
    private static Series1AutoRegistration register = new Series1AutoRegistration(); 

    private Series1AutoRegistration() 
    { 
     MessageFactory.RegisterSeriesFactory(SERIES_ID, 
               SERIES_VERSION, 
               new Series1Factory()); 

    } 
} 

在C++中,我只是做了一個全局靜態的Series1AutoRegistration變量。但是,c#不保證靜態成員的初始化,直到它被使用之前,自動註冊纔會發生。有沒有人有關於如何完成此任務的想法?

回答

1

你可以,或

  1. 使用像MEFUnity一個框架,解決了這個問題
  2. 使用module initializer每當一個dll被加載運行代碼。有此功能不支持C#,你需要按摩IL直接

stackoverflow question答案如何使用MEF來實現類工廠

-1

實現與singleton pattern註冊表。

獲取實例屬性保證初始化。

+0

這不符合我的需求。我想通過將它編譯到程序中來註冊一個類,並且不需要額外調用新的消息系列。單例模式仍然需要我調用該類來調用構造函數。 – Charlie