2013-06-03 6 views
9

Mevcut uygulamaların meclislerini bir portatif kütüphane projesi içine almanın bir yolunu arıyorum. Klasik kütüphane projesindeTaşınabilir kitaplıkta AppDomain.GetAssemblies alternatif var mı?

, kod satırı aşağıdaki iş yapmak:

var assemblies = System.AppDomain.CurrentDomain.GetAssemblies(); 

Ama System.AppDomain taşınabilir kütüphaneye kullanılamaz gibi görünüyor.

Taşınabilir kitaplıktaki geçerli alan derlemelerini elde etmenin bir yolu bilen var mı?

+0

AppDomainWrapper.Instance = new AppDomainWrapperInstance(); 
. AppDomain, örneğin Silverlight ve WinRT uygulamalarında mevcut değildir. Desteklemek istediğiniz hedefleri belirtmeyi unuttunuz. Fakat açıkça, taştan su alamazsınız, eğer istediğiniz hedef desteklemiyorsa, o zaman çalışamayacak bir kütüphaneniz var demektir. –

+1

Neden geçerli AppDomain'deki tüm derlemelerin listesini ilk olarak bir PCL'den almanız gerektiğini sorabilir miyim? –

+0

Daha fazla bilgi verebilir misiniz? Gördüğüm kullanımdan, geçerli derlemeleri geçerli AppDomain'den çekerek, belirli bir uygulamadaki tüm derlemelerin zaten yüklenmiş olduğu varsayımını yapar. –

cevap

6

Sen platformu kanca kullanabilirsiniz: Taşınabilir kütüphanesinde

:

using System.Collections.Generic; 

namespace PCL { 
    public interface IAppDomain { 
    IList<IAssembly> GetAssemblies(); 
    } 

    public interface IAssembly { 
    string GetName(); 
    } 

    public class AppDomainWrapper { 
    public static IAppDomain Instance { get; set; } 
    } 
} 

ve benzeri (taşınabilir kütüphanede) erişemeyeceği: En platform olarak

AppDomainWrapper.Instance.GetAssemblies(); 

bağımlı uygulama bunu uygulamak için ihtiyacınız olacak:

public class AppDomainWrapperInstance : IAppDomain { 
    IList<IAssembly> GetAssemblies() { 
    var result = new List<IAssembly>(); 
    foreach (var assembly in System.AppDomain.CurrentDomain.GetAssemblies()) { 
     result.Add(new AssemblyWrapper(assembly)); 
    } 
    return result; 
    } 
} 

public class AssemblyWrapper : IAssembly { 
    private Assembly m_Assembly; 
    public AssemblyWrapper(Assembly assembly) { 
    m_Assembly = assembly; 
    } 

    public string GetName() { 
    return m_Assembly.GetName().ToString(); 
    } 
} 

ve bootstrap o

Bir sınıf veya yöntem PCL'de mevcut değilse o zaman taşınabilir alternatif olmadığını * olası çok * olmasından çalışmak gerekir
+2

UWP'de veya Xamarin :( – bbqchickenrobot