2013-06-03 25 views
9

Tôi đang tìm cách để có được các hội đồng ứng dụng hiện tại bên trong một dự án thư viện di động.Có cách nào thay thế cho AppDomain.GetAssemblies trên thư viện di động không?

Trong dự án thư viện cổ điển, dòng mã dưới đây thực hiện công việc:

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

Nhưng dường như System.AppDomain không có sẵn vào thư viện di động.

Có ai biết cách để lấy các cụm miền hiện tại trên thư viện di động không?

+0

Bạn sẽ cần phải làm việc với thực tế là nếu một lớp hoặc phương pháp không có sẵn trong PCL sau đó nó là * rất * không chắc rằng có một sự thay thế di động. AppDomain không có sẵn trong các ứng dụng Silverlight và WinRT chẳng hạn. Bạn quên đề cập đến các mục tiêu bạn muốn hỗ trợ. Nhưng rõ ràng bạn không thể vắt nước ra khỏi đá, nếu mục tiêu bạn muốn không hỗ trợ nó thì bạn có một thư viện không thể hoạt động được. –

+1

Tôi có thể hỏi tại sao bạn cần lấy danh sách tất cả các hội đồng trong AppDomain hiện tại từ PCL ngay từ đầu? –

+0

Bạn có thể cung cấp thêm thông tin? Từ cách sử dụng tôi đã thấy, việc kéo các assembly hiện tại từ AppDomain hiện tại làm cho giả định rằng tất cả các assembly trong một ứng dụng đã cho đã được nạp. –

Trả lời

6

Bạn có thể sử dụng nền tảng móc:

Trong thư viện di động của bạn:

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; } 
    } 
} 

và bạn có thể truy cập chúng (trong thư viện di động của bạn) như:

AppDomainWrapper.Instance.GetAssemblies(); 

Trong từng platform của bạn ứng dụng phụ thuộc bạn cần phải triển khai:

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(); 
    } 
} 

và bootstrap nó

AppDomainWrapper.Instance = new AppDomainWrapperInstance(); 
+2

không hoạt động trên UWP hoặc Xamarin :( – bbqchickenrobot

Các vấn đề liên quan