Is there an alternative to AppDomain.GetAssemblies on portable library?

后端 未结 1 470
日久生厌
日久生厌 2020-12-16 02:31

I\'m looking for a way to get the current app\'s assemblies inside a portable library project.

In classic library project, the code line below do the job:

         


        
相关标签:
1条回答
  • 2020-12-16 02:44

    You can use platform hooks:

    In your portable library:

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

    and you can access them (in your portable library) like:

    AppDomainWrapper.Instance.GetAssemblies();
    

    In your platform-dependent application you'll need to implement it:

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

    and bootstrap it

    AppDomainWrapper.Instance = new AppDomainWrapperInstance();
    
    0 讨论(0)
提交回复
热议问题