Tôi có giao diện IExample
và một tập hợp các lớp ClassOne
, ClassTwo
và ClassThree
, tất cả được xác định trong các không gian tên khác nhau. Tôi có thể sẽ loại bỏ một trong hai lớp học, hoặc thêm một lớp mới ở một nơi mới, ở giai đoạn sau trong quá trình phát triển.Thực hiện ngay tất cả các lớp đang triển khai một giao diện cụ thể
Bây giờ, tôi muốn tìm tất cả các loại triển khai IExample
khi chạy và khởi tạo chúng. (Tôi biết trước rằng không có lớp nào thực hiện IExample
sẽ bao giờ cần bất kỳ đối số hàm tạo nào, nhưng tôi không biết cách chỉ định mã đó, vì vậy đó là tôi - không phải trình biên dịch - biết ...)
Đây có phải là khả thi? Làm thế nào để tôi đi về để làm điều đó?
Cập nhật: "không thể tạo một thể hiện của một giao diện" bây giờ tôi đã thử một số trong những phương pháp đề nghị, nhưng trên tất cả trong số họ, dòng Activator.CreateInstance(type)
, tôi nhận được một System.MissingMethodException vì tôi Đây là mã của tôi:
var tasks = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(t => typeof(IBootstrapperTask).IsAssignableFrom(t))
// This line is where it fails
.Select(t => Activator.CreateInstance(t) as IBootstrapperTask)
.ToArray();
new AutoMapperBootstrapper(tasks).Initialize();
Nếu không có sự as
khoản tôi không thấy bất kỳ ngoại lệ, nhưng tôi đưa ra một object[]
, và tôi cần một IBootstrapperTask[]
cho các nhà xây dựng trên dòng cuối cùng trong đoạn trích. Tôi đã thử nhiều cách khác nhau để bỏ nó, nhưng không có cách nào làm việc.
Quan trọng hơn mặc dù, nó sẽ chỉ bao gồm các assembly đã được * nạp *. Có thể có những người khác đã được * tham chiếu * nhưng chưa được tải. Cá nhân tôi muốn giữ nó rõ ràng :) –