Есть ли альтернатива AppDomain.GetAssemblies в переносимой библиотеке?
Я ищу способ получить сборки текущего приложения внутри проекта переносимой библиотеки.
В классическом библиотечном проекте строка кода ниже делает свою работу:
var assemblies = System.AppDomain.CurrentDomain.GetAssemblies();
Но похоже, что System.AppDomain недоступен для переносимой библиотеки.
Кто-нибудь знает способ получить текущие доменные сборки в переносимой библиотеке?
1 ответ
Вы можете использовать крючки платформы:
В вашей портативной библиотеке:
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; }
}
}
и вы можете получить к ним доступ (в вашей портативной библиотеке), например:
AppDomainWrapper.Instance.GetAssemblies();
В вашем платформенно-зависимом приложении вам необходимо реализовать его:
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();
}
}
и загрузи его
AppDomainWrapper.Instance = new AppDomainWrapperInstance();