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 に答える