5

Ich habe eine .NET Core (UWP Lösung) Anwendung, die 3 verschiedene Projekte hat (nennen wir sie A, B und C).Wie kommuniziert man über Projekte innerhalb einer .NET-Lösung?

A und B sind Windows-Laufzeitkomponenten und C ist eine einfache Klassenbibliothek.

Projekte A und B haben einen Verweis auf das Projekt C.

Ich mag würde eine Klasse des Projekt C zuzugreifen, die die Instanz würde

Ich dachte, zwischen den Projekten A und B geteilt werden zu einem Singleton-Muster (natürlich), mit der Lazy-Methode von .NET 4

Problem ist, dass die Instanz nicht jedes Mal die gleiche ist, wenn A und B Projekte auf die Instanz zugreifen. Die Lazy-Methode erstellt eine neue Instanz der Klasse, da sie anscheinend nicht zuvor erstellt wurde. Ich frage mich, ob ich ein Singleton zwischen verschiedenen Projekten einer Lösung teilen kann. Ich habe gelesen, dass ein Projekt einem Prozess zugeordnet ist und jeder Prozess seinen eigenen Speicherplatz hat, der nicht geteilt werden kann. Gibt es eine Lösung für mein Problem?

EDIT: Hier ist meine Umsetzung meiner HubService Klasse:

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; 

Auch ist es möglich, einen Singleton in verschiedenen Baugruppen zu teilen Tools wie Schloss Windsor, Ninject, Autofac oder Unity verwenden?

+0

Wir müssen Ihre Implementierung des Singleton sehen, sowie die Art, wie Sie es in A und B verwenden. – Glubus

+1

Es ist nicht die gleiche Instanz, also können Sie nicht. Ihre Projekt-C-Assembly wird separat in A und B geladen und teilt den Speicher nicht nur auf magische Weise zwischen zwei Prozessen. – LibertyLocked

+0

Führen Sie eine statische versiegelte Singleton-Implementierung Ihrer Klasseninitialisierung durch. Dies verhindert, dass mehrere Threads auf Ihre verzögerte Initialisierung zugreifen. – Maertin

Antwort

1

Singleton-Klasse wird hier nicht funktionieren - jeder Prozess wird seinen eigenen Speicher und so sein eigenes Singleton haben.

AFAIK in UWP für Interprozess (zwischen Hintergrund Aufgaben und Haupt UI, abgesehen von Audio Task) Kommunikation benötigen Sie eine Art von Broker. Für eine kurze Synchronisation können Sie die Verwendung von LocalSettings, für kompliziertere Szenarien möglicherweise eine Datei/Datenbank in LocalFolder. Wenn Sie sich entscheiden, eine Datei zu verwenden, müssen Sie die Prozesse synchronisieren. Zu diesem Zweck haben Sie Objekte wie Mutex nad WaitHandles.

Verwandte Themen