Tôi đã đấu tranh để tìm ví dụ về cách viết một thuộc tính tùy chỉnh để xác nhận các thông số phương pháp, tức là, biến dạng này:Làm thế nào để sử dụng tham số phương pháp tính
public void DoSomething(Client client)
{
if (client.HasAction("do_something"))
{
// ...
}
else
{
throw new RequiredActionException(client, "do_something");
}
}
vào đây:
public void DoSomething([RequiredAction(Action="some_action")] Client client)
{
// ...
}
Theo như tôi có thể biết, tôi cần thêm thuộc tính này vào thuộc tính tùy chỉnh của mình, nhưng tôi không biết cách truy cập thông số được trang trí Client
:
[AttributeUsageAttribute(AttributeTargets.Parameter)]
public class RequireActionAttribute : System.Attribute
{
public Type Action {get; set;}
public RequireActionAttribute()
{
// .. How do you access the decorated parameter?
Client client = ???
if (!client.HasAction(Action))
{
throw new RequiredActionException(client, Action);
}
}
}
Tại sao bạn không thể chỉ chấp nhận giao diện làm thông số? Ví dụ, bạn có thể có một 'IDoSomething'. –
Bạn không thể truy cập mục được trang trí từ bên trong thuộc tính. Thuộc tính ngồi với kiểu siêu dữ liệu tĩnh, vì vậy bạn thực sự có được thuộc tính từ mục đó. Điều đó nói rằng, thuộc tính sau đó có thể có một phương pháp mà có một đối số đó là mục, nhưng sau đó bạn đang sử dụng một sledgehammer để crack một quả óc chó và có thể đã làm nó dễ dàng hơn nhiều mà không có thuộc tính. –