Tôi thậm chí không chắc chắn nếu điều này là có thể xin lỗi nếu không. Tôi đã googled khá rộng rãi và không tìm thấy những gì tôi đang tìm kiếm.Phương pháp ghi đè trong DLL bằng cách sử dụng sự phản chiếu
Về cơ bản, chúng tôi có một ứng dụng được sản xuất bởi bên thứ ba, trong đó, hoàn toàn thẳng thừng là rác rưởi. Chúng tôi có một vấn đề cụ thể và đã quản lý để theo dõi vấn đề bằng cách sử dụng ILSpy cho một phương pháp trong một DLL. Rõ ràng là chúng tôi không có (cũng không thể nhận được) mã nguồn và công ty được đề cập là không sẵn sàng khắc phục vấn đề trong bất kỳ thời điểm hợp lý nào.
Vì vậy, chúng tôi đã điều tra nhiều con đường điều tra khác nhau và không có gì. Tôi đã nhìn vào xem liệu điều này có thể được thực hiện bằng cách sử dụng sự phản ánh và điều này là khá nhiều hy vọng cuối cùng chúng ta có để làm việc này. Tóm lại, những gì tôi muốn làm là như sau:
- Tạo một thư viện lớp đơn giản với tên giống như DLL hiện
- Sử dụng phản ánh để nhập khẩu các phương pháp từ DLL hiện
- Bằng cách nào đó ghi đè lên phương pháp được đề cập với chính mã của tôi, hãy sửa mã số
- Tạo lại mã, vì vậy tôi có một DLL mới, chứa 99% chức năng của DLL hiện tại nhưng với mã ghi đè của tôi cung cấp chức năng chính xác.
Tôi đã tìm thấy, trong quá trình điều tra của tôi TypeBuilder.DefineMethodOverride và cũng là một trang từ StackOverflow, có vẻ tương tự nhưng không hoàn toàn những gì tôi đang tìm kiếm.
http://msdn.microsoft.com/en-us/library/system.reflection.emit.typebuilder.definemethodoverride.aspx
Is there a way to "override" a method with reflection?
Bất cứ lời khuyên đánh giá cao!
Andrew
Sửa
Ý tưởng có thể khác tôi có là để tạo ra một lớp học phần có chứa các chức năng ghi đè lên, nhưng điều đó không có vẻ khả thi một trong hai.
Tự hỏi nếu một cách tiếp cận dựa trên đánh chặn sẽ hoạt động ở đây - một cái gì đó như Castle DynamicProxy: http://www.castleproject.org/projects/dynamicproxy/ - rõ ràng là bạn sẽ không hoàn toàn thay thế cuộc gọi phương thức, nhưng bạn chắc chắn có thể chặn/lỗi xử lý và tinh chỉnh (oh yeah và nó phụ thuộc nếu lớp đó có các phương thức ảo) – Charleh
Tại sao không chỉ tạo một lớp, như bạn đã nói, gọi lớp thứ ba cho hầu hết mọi thứ ngoại trừ phương thức bạn muốn ghi đè? Hoặc bắt nguồn từ lớp đó và sử dụng tên khác cho phương pháp đó? Ngoài ra bạn có thực sự cần điều đó để được bên trong 1 dll độc đáo? Tại sao không chia nó thành 2? – ppetrov