2

次のようなソリューションに 3 つのプロジェクトがあります。

  1. ライブラリを参照する Xna Game Project (GAME)
  2. ライブラリ プロジェクト (ライブラリ)
  3. ライブラリを参照する Windows フォーム プロジェクト (WIN)

このプロジェクトには、複数のプロジェクト スタートアップ (WIN と GAME) があります。

そのため、私のライブラリには、シリアル コネクタに接続されたデバイスを使用する統一された方法を提供するために、シングルトンを使用してそれらの間の依存関係を注入するファサードがあります。

それが私がシングルトンを使用している理由です...同じポートに2つの接続を持つことはできません。

他の 2 つのライブラリ (WIN と GAME) では、このファサードを通じてナビゲーターを使用します。しかし、その結果、シリアル ポートのインスタンス化は常に 2 回試行されたため、2 回目は常に失敗します。..

それをデバッグし、その行にブレークポイントを追加します:

private static readonly LogicalFaccade _instance = new LogicalFaccade();

私は 2 つの異なる呼び出しを要求しました...私は各プロジェクト (WIN と GAME) から 1 つを呼び出します。

プロジェクト間で一意のインスタンスを共有するにはどうすればよいですか?

私のコードに何か問題がありますか? ...

public class LogicalFaccade
{
    private static readonly object thredLock = new Object();

    private static readonly LogicalFaccade _instance = new LogicalFaccade();
    public static LogicalFaccade Instance
    {
        get
        {
            return _instance;
        }
    }

    private INavigator _navigator;
    public INavigator Navigator
    {
        get
        {
            lock (thredLock)
            {
                if (_navigator == null)
                {
                    _navigator = new SerialNavigator("COM4", 19200, 8);
                }
                return _navigator;
            }
        }
    }
}
4

2 に答える 2