5

3 farklı projeye sahip bir .NET Core (UWP çözümü) uygulamasına sahibim (A, B ve C olarak adlandırın).Bir .NET çözümü içindeki projeler arasında nasıl iletişim kurabilirim?

A ve B, Windows Çalışma Zamanı Bileşenleri ve C basit bir Sınıf Kitaplığıdır.

Projeler A ve B projeye bir başvuru C

I örnek daha düşünce

proje A ve B arasında paylaşılabilir olur proje C, bir sınıf erişmek isteyen

.NET 4

Tembel yöntemini kullanarak tek bir kalıp modeline (tabii ki) sorun, örneğin A ve B projelerinin her defasında örneğe erişmesi örneğinin aynı olmamasıdır. Lazy yöntemi, daha önce oluşturulmamış gibi göründüğü için sınıfın yeni bir örneğini oluşturur. Bir çözümün farklı projeleri arasında bir singleton paylaşabilir miyim acaba. Bir projenin bir süreçle ilişkili olduğunu okudum ve her işlemin paylaşılamayacak kendi bellek alanı var. Sorunumun çözümü var mı?

DÜZENLEME: Bu kale Windsor, Ninject, AutoFac veya birlik gibi araçlar kullanılarak farklı derlemeler genelinde singleton'ununu paylaşmak mümkündür Ayrıca

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; 

: İşte benim HubService sınıfının benim uygulaması var?

+0

Tektonik uygulamanızın yanı sıra hem A hem de B'de kullanma şeklinizi görmemiz gerekiyor. – Glubus

+1

Aynı örnek değil, bu yüzden yapamazsınız. Proje C montajınız A ve B'ye ayrı olarak yüklenir ve sadece 2 işlem arasındaki belleği sihirli bir şekilde paylaşmaz. – LibertyLocked

+0

Sınıf başlatmanızın statik mühürlü tekil bir uygulamasını yapın. Bu, tembel başlatma işleminize erişen birden çok ileti dizisini engeller. – Maertin

cevap

1

Singleton sınıfı burada çalışmayacaktır - her işlem kendi belleğine ve dolayısıyla kendi singletonuna sahip olacaktır. Arabirim işlemi için (arka plan görevleri ve ana kullanıcı arabirimi arasında, ses görevinin dışında) iletişim için UWP numaralı telefondan AFAIK . Kısa senkronizasyon için, daha karmaşık senaryolar için LocalFolder adresindeki bir dosya/veritabanı için LocalSettings'u kullanmayı düşünebilirsiniz. Bir dosyayı kullanmaya karar verirseniz, süreçleri senkronize etmeniz gerekecektir, bu amaçla Mutex nad WaitHandles gibi nesneleriniz vardır.

İlgili konular