2010-10-19 66 views
5

Có cách nào để tôi có thể theo dõi và chặn cuộc gọi đến các giá trị trong thuộc tính được tự động triển khai không?Theo dõi cuộc gọi đến các thuộc tính được tự động triển khai

Tôi muốn có mã trông một chút như thế này:

[Tracked] 
public int SomeProperty { get; set; } 

Lý tưởng nhất là các thuộc tính sẽ có thể đánh chặn thay đổi đối với giá trị tài sản. Điều này có thể không?

Điều tôi không muốn nó có đoạn mã thứ hai quay qua đối tượng sau đó và yêu cầu giá trị, nhưng thay vào đó thuộc tính sẽ lưu giá trị khi nó đang được đặt.

Trả lời

4

No. Cách bạn thực hiện việc này là không sử dụng các thuộc tính tự động. Giải pháp duy nhất có thể có, là sử dụng một cái gì đó như Castle AOP để tạo trình bao bọc tự động quanh lớp của bạn và theo dõi những thay đổi đó, nhưng đây là một công việc khó khăn để thực hiện.

3

Bạn sẽ có thể thực hiện việc này với khung AOP, chẳng hạn như PostSharp (mà tôi lưu ý bây giờ là thương mại). Có một vài liên kết khác here, nhưng một số liên kết đã chết.

3

Nếu bạn muốn một giải pháp hoạt động trong thời gian chạy, thì bạn sẽ muốn có một khuôn khổ lập trình hướng-khía cạnh (AOP); Tôi đã sử dụng CciSharp với một số thành công. Nó không phải là trưởng thành như PostSharp, nhưng hoạt động trên cùng một nguyên tắc cơ bản: nó sẽ sửa đổi mã đã được biên dịch của bạn, tạo ra một assembly khác.

Nếu bạn chỉ muốn điều này để thử nghiệm (hoặc lược tả), thì có một tùy chọn khác: Microsoft Moles (cũng miễn phí). Nó hoạt động rất khác; nó sử dụng một loại "đường vòng" của tiêm để thay đổi chương trình trong khi nó đang chạy, chặn các phương thức getter và setter của thuộc tính.

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