5

私は3つの異なるプロジェクト(A、B、Cと呼ぶ)を持つ.NET Core(UWPソリューション)アプリケーションを持っています。1つの.NETソリューション内でプロジェクト間で通信するにはどうすればよいですか?

AとBはWindowsランタイムコンポーネントであり、Cは単純なクラスライブラリです。

プロジェクトAとBは、プロジェクトへの参照を有するC.

Iインスタンス思っ

プロジェクトAとBとの間で共有されるプロジェクトCのクラスにアクセスしたい

Lazyの.NETメソッドを使用してシングルトンパターンに変換する4

問題は、AとBプロジェクトがインスタンスにアクセスするたびにインスタンスが同じではないという問題です。 Lazyメソッドは、以前作成されていないように見えるため、クラスの新しいインスタンスを作成します。ソリューションの異なるプロジェクト間でシングルトンを共有できるかどうかは疑問です。私は、プロジェクトがプロセスに関連付けられており、各プロセスには共有できない独自のメモリ空間があることを読んだことがあります。私の問題の解決策はありますか?

EDIT:それは城ウィンザー、Ninject、Autofacまたはユニティのようなツールを使用して異なるアセンブリ間でシングルトンを共有することが可能であり、また

private static readonly Lazy<HubService> Lazy = 
     new Lazy<HubService>(() => new HubService(), LazyThreadSafetyMode.ExecutionAndPublication); 

    private HubService() 
    { 
     _asyncQueue = new AsyncQueue<Guid>(); 
    } 

    public static HubService Instance => Lazy.Value; 

: はここに私のHubServiceクラスの私の実装ですか?

+0

シングルトンの実装方法と、AとBの両方で使用する方法を確認する必要があります。 – Glubus

+1

同じインスタンスではないため、できません。あなたのプロジェクトCアセンブリは別々にAとBにロードされ、2つのプロセス間で魔法のようにメモリを共有するだけではありません。 – LibertyLocked

+0

クラス初期化の静的密封シングルトン実装を行います。これにより、複数のスレッドが遅延初期化にアクセスするのを防ぎます。 – Maertin

答えて

1

シングルトンクラスはここでは動作しません。すべてのプロセスは独自のメモリを持ち、それ自身のシングルトンも持ちます。あなたはブローカーのいくつかの種類が必要になります通信(離れてオーディオタスクから、バックグラウンドタスクとメインUIの間)間のプロセスのためのUWP

私の知る限り。短い同期のために、LocalSettingsを使用すると考えられます。より複雑なシナリオの場合は、ファイル/データベースLocalFolderです。ファイルを使用する場合は、プロセスを同期させる必要があります。この目的のために、ミューテックス nad WaitHandlesのようなオブジェクトがあります。

関連する問題