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# 不保证静态成员的初始化,直到它被使用之前,所以自动注册不会发生。有人对我如何做到这一点有想法吗?

4

2 回答 2

1

你可以

  1. 使用像MEFUnity这样的框架来解决这个问题
  2. 每当加载 dll 时,使用模块初始化程序运行代码。此功能没有 C# 支持,您需要直接按摩 IL

这个stackoverflow问题回答了如何使用MEF来实现类工厂

于 2012-09-11T14:51:27.837 回答
-1

使用单例模式实现注册表。

获取 Instance 属性保证初始化。

于 2012-09-11T14:56:46.387 回答