我有一個處理自定義消息格式的工廠。系統中定義了幾種基於此格式的不同消息集。我正試圖重構消息處理代碼,以便消息設置與工廠「自動註冊」。這將允許我們僅在系統的各個部分中包括所需的消息集,並且還允許添加消息集而不影響現有的代碼。專業工廠自動註冊
註冊的主要工廠類如下。
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#不保證靜態成員的初始化,直到它被使用之前,自動註冊纔會發生。有沒有人有關於如何完成此任務的想法?
這不符合我的需求。我想通過將它編譯到程序中來註冊一個類,並且不需要額外調用新的消息系列。單例模式仍然需要我調用該類來調用構造函數。 – Charlie