Я пытаюсь понять различия между Assembly.Load и Assembly.ReflectionOnlyLoad.C# Assembly.Load vs Assembly.ReflectionOnlyLoad
В коде ниже я пытаюсь найти все объекты в данной сборке, которые наследуют от данного интерфейса:
var myTypes = new List<Type>();
var assembly = Assembly.Load("MyProject.Components");
foreach (var type in assembly.GetTypes())
{
if (type.GetInterfaces().Contains(typeof(ISuperInterface)))
{
myTypes.Add(type);
}
}
Этот код прекрасно работает для меня, но я делал некоторые исследования в другие возможно лучшие альтернативы, и натолкнулся на метод Assembly.ReflectionOnlyLoad().
Я предположил, что, так как я не загружается или выполнения какой-либо из объектов, по существу, просто запрашивая их определений, которые я мог бы использовать ReflectionOnlyLoad для небольшого повышения производительности ...
Но получается, что, когда я изменить Assembly.Load к Assembly.ReflectionOnlyLoad я получаю следующее сообщение об ошибке при вызове assembly.GetTypes():
System.Reflection.ReflectionTypeLoadException:
Не удалось загрузить один или несколько запрашиваемых типов. Получить свойство LoaderExceptions для получения дополнительной информации .
Я предположил, что приведенный выше код просто делает отражение и «смотрит на» библиотеку ... но это какой-то экземпляр принцип неопределенности Гейзенберга при этом, глядя на библиотеку и объекты в нем на самом деле пытаясь каким-то образом создать их экземпляр?
Спасибо, Max