Tôi đang cố gắng hiểu sự khác biệt giữa Assembly.Load và Assembly.ReflectionOnlyLoad.C# Assembly.Load vs Assembly.ReflectionOnlyLoad
Trong đoạn mã dưới đây, tôi đang cố gắng để tìm thấy tất cả các đối tượng trong một hội đồng cho rằng kế thừa từ một giao diện cho:
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);
}
}
Mã này hoạt động tốt đối với tôi, nhưng tôi đã làm một số nghiên cứu khác có thể lựa chọn thay thế tốt hơn và đi qua phương thức Assembly.ReflectionOnlyLoad().
Tôi cho rằng kể từ khi tôi đang không tải hoặc thực hiện bất kỳ của các đối tượng, về cơ bản chỉ truy vấn về định nghĩa của chúng tôi có thể sử dụng ReflectionOnlyLoad cho một sự gia tăng hiệu suất nhẹ ...
Nhưng nó chỉ ra rằng khi tôi thay đổi Assembly.Load để Assembly.ReflectionOnlyLoad tôi nhận được lỗi sau khi nó gọi assembly.GetTypes():
System.Reflection.ReflectionTypeLoadException:
Không thể tải một hoặc nhiều các loại yêu cầu. Truy lục thuộc tính Tải trọng ngoại lệ để biết thêm thông tin .
Tôi giả định rằng mã ở trên CHỈ là phản ánh và "nhìn vào" thư viện ... nhưng đây là một ví dụ nào đó của Nguyên lý bất định Heisenberg, theo đó nhìn vào thư viện và các đối tượng trong thực tế cố gắng để khởi tạo chúng theo một cách nào đó?
Cảm ơn, Max