2010-06-03 28 views
5

Tôi muốn được thông báo bất cứ khi nào một phương thức cụ thể đã được gọi. Tôi đã hy vọng tôi có thể thực hiện điều này bằng cách sử dụng Reflection, nhưng những nỗ lực của tôi đã không đưa tôi đến bất cứ đâu. Tôi có thể được thông báo bằng cách nào?Được thông báo về các cuộc gọi phương thức trong .NET

Tôi đã tìm cách sử dụng MethodInfo là cách để đi, nhưng như tôi đã nói, tôi không tìm thấy gì ở đó có thể giúp tôi hoàn thành những gì tôi muốn làm.

Tôi không thể thay đổi phương pháp hoặc trang trí nó bằng thuộc tính hoặc bất kỳ thứ gì. Nếu tôi có thể làm một cái gì đó như thế, tôi sẽ không cần phải làm điều này, tôi chỉ có thể thay đổi chính phương thức đó.

Trả lời

8

Bạn đã xem xét AOP (lập trình hướng-khía cạnh) chưa? Một cái gì đó như PostSharp.

+1

+1 Tôi chắc chắn sẽ sử dụng phương pháp này! –

+2

+1 Bạn cũng có thể đạt được các tính năng giống như AOP mà không cần PostSharp bằng cách sử dụng không có gì ngoài Decorator: http://blog.ploeh.dk/2010/04/07/DependencyInjectionIsLooseCoupling.aspx –

+0

một trang trí cũng là một ý tưởng tốt –

2

Tôi tin rằng cách duy nhất để thực hiện việc này là viết lại phần thân phương thức để nó thông báo cho bạn khi phương thức được gọi hoặc sử dụng hồ sơ cấu hình CLR.

Cách đầu tiên có thể được thực hiện bằng cách sử dụng khung công tác AOP. Bạn có thể sử dụng Postsharp (được biến thành một sản phẩm thương mại) để đạt được nó với OnMethodBoundaryAspect. Dưới đây là một ví dụ: Derive the class from OnMethodBoundaryAspect

-1

bạn có thể sử dụng phương pháp khuyến nông

vì vậy bạn có thể sử dụng các thuộc tính khác nhau và thay đổi tất cả mọi thứ trước hoặc sau khi phương pháp thực tế

+1

Tôi không người gọi những phương pháp này. Tôi không thể làm cho mã ban đầu đột nhiên gọi phương thức mở rộng của tôi. Vì vậy, không đi. – Alex

0

Reflection được một nửa số giải pháp. Bạn cần phải bao bọc các đối tượng đang được quan sát để chặn các cuộc gọi phương thức. Thông thường thi được thực hiện thông qua các đối tượng proxy từ xa.

Thư viện doanh nghiệp có khối Chặn thống nhất thực hiện chính xác những gì bạn muốn. Ngoài ra, bạn có thể muốn nhìn vào DynamicProxy của khung công tác Castle, cho phép bạn kiểm soát triệt để quy trình chặn này.

Googling cho lập trình hướng khía cạnh sẽ cung cấp cho bạn thêm thông tin.

Các vấn đề liên quan