我有一个处理自定义消息格式的工厂。系统中定义了几个基于这种格式的不同消息集。我正在尝试重构消息处理代码,以便消息设置为工厂“自动注册”。这将允许我们只在系统的各个部分中包含所需的消息集,并且还允许在不影响现有代码的情况下添加消息集。
注册的主要工厂类如下。
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# 不保证静态成员的初始化,直到它被使用之前,所以自动注册不会发生。有人对我如何做到这一点有想法吗?