我有一个处理自定义消息格式的工厂。基于此格式的若干不同消息集在系统中定义。我正在尝试重构消息处理代码,以便消息设置“自动注册”工厂。这将允许我们仅在系统的各个部分中包含所需的消息集,并且还允许添加消息集而不影响现有代码。
注册的主要工厂类如下。
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#不保证静态成员的初始化,因此不会发生自动注册。有没有人有关于如何实现这一目标的想法?
答案 0 :(得分:1)
你可以
这个stackoverflow question回答了如何使用MEF来实现类工厂
答案 1 :(得分:-1)
使用singleton pattern实现注册表。
获取Instance属性可以保证初始化。