2012-02-26 58 views
5

Tôi muốn làm một thuộc tính mà sẽ cho phép tôi để xác định một số phương pháp áp dụng cho bất động sản, như thế này:Làm thế nào để làm tài liệu tham khảo phương pháp trong tham số thuộc tính

public class MyClass 
{ 
    [MyAttribute(Converter="ConverterMethod")] 
    public string Prop { get; set; } 

    public static string ConverterMethod(string src) 
    { 
     return src + " converted"; 
    } 
} 

cách 'đúng' để làm điều đó là gì?

Dưới đây là những cách mà tôi thấy: sở hữu chuỗi

  1. Make và chiết xuất phương pháp tương ứng với phản ánh trong thời gian chạy
  2. Hãy Dictionary<string, Func<string, string>> và cư nó với các phương pháp tương ứng trong thời gian chạy. Sau đó, trích xuất phương thức sử dụng thuộc tính chuỗi của thuộc tính làm khóa. Phương pháp này có khả năng chống lại quá trình tái cấu trúc, nếu tôi đổi tên tất cả mọi thứ sẽ hoạt động (phím từ điển sẽ vẫn giữ nguyên)
  3. Giao diện 'IConverter' và vượt qua typeof(ConverterImpl) để gán. Sau đó tạo một thể hiện của bộ chuyển đổi trong thời gian chạy và sử dụng giao diện của nó để chuyển đổi các giá trị. Bằng cách này có vẻ tốt nhất với tôi nhưng tôi không bao giờ sử dụng tài sản Type trong thuộc tính và thậm chí không biết nếu chúng được tuần tự hóa tốt.

Phương pháp nào là tốt nhất? Có cách tiếp cận nào khác không? Mọi người thường làm những việc như thế nào?

Trả lời

2

Tùy chọn đầu tiên là khá bình thường và có lợi thế về tính đơn giản. Bạn có quyền nói rằng nó là một chút dễ bị tái cấu trúc, nhưng ... điều này hiếm khi là một vấn đề "thực". Tuy nhiên,

Phương pháp khác (thứ tư) sẽ làm cho thuộc tính trừu tượng bằng phương pháp trừu tượng và phân lớp bằng mã chuyển đổi trong thuộc tính - khi đó bạn có thể nhận thuộc tính (dưới dạng thuộc tính cơ sở) và chỉ cần gọi phương thức ảo, cách tiếp cận này phổ biến trong những thứ như MVC.

Cá nhân, tôi thường chỉ sử dụng tùy chọn đầu tiên, cùng với các bài kiểm tra đơn vị về an toàn (trong trường hợp tái cấu trúc, v.v.).

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