专业工厂自动注册

时间:2012-09-11 14:42:14

标签: c#

我有一个处理自定义消息格式的工厂。基于此格式的若干不同消息集在系统中定义。我正在尝试重构消息处理代码,以便消息设置“自动注册”工厂。这将允许我们仅在系统的各个部分中包含所需的消息集,并且还允许添加消息集而不影响现有代码。

注册的主要工厂类如下。

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#不保证静态成员的初始化,因此不会发生自动注册。有没有人有关于如何实现这一目标的想法?

2 个答案:

答案 0 :(得分:1)

你可以

  1. 使用解决此问题的MEFUnity等框架
  2. 每当加载dll时,使用module initializer运行代码。此功能没有C#支持,您需要直接按摩IL
  3. 这个stackoverflow question回答了如何使用MEF来实现类工厂

答案 1 :(得分:-1)

使用singleton pattern实现注册表。

获取Instance属性可以保证初始化。