2009-10-05 36 views
23

tôi có trường hợp sau đây:Sử dụng phản xạ để tìm giao diện được cài

public interface IPerson { .. }  
public class Person : IPerson { .. }  
public class User : Person { .. } 

Bây giờ; nếu tôi có đối tượng "Người dùng" - làm thế nào tôi có thể kiểm tra xem điều này có thực hiện IPerson khi sử dụng sự phản chiếu không? Để chính xác hơn, tôi có một đối tượng có thể có một thuộc tính SomeUser, một đối tượng nào đó có thể thực hiện giao diện "IPerson". Trong trường hợp của tôi, tôi thực sự có một người dùng, nhưng đây là những gì tôi muốn kiểm tra thông qua sự phản ánh. Tôi không thể tìm ra cách để kiểm tra các loại tài sản vì nó là một "tài khoản", nhưng tôi muốn kiểm tra xem nó thực hiện IPerson ...:

var control = _container.Resolve(objType); // objType is User here 
var prop = viewType.GetProperty("SomeUser"); 
if ((prop != null) && (prop.PropertyType is IPerson)) 
{ .. } 

(Lưu ý rằng đây là một việc đơn giản hóa của tôi trường hợp thực tế, nhưng điểm phải giống nhau ...)

+4

Nếu bạn đã có một đối tượng đối tượng, bạn không cần phản ánh để kiểm tra xem đối tượng của bạn có triển khai một giao diện nhất định hay không. Bạn có thể chỉ cần kiểm tra 'if (objUser là IPerson)' –

+0

Nhận xét của 0xA3 có phải là câu trả lời đúng không? – itchi

Trả lời

13
var control = _container.Resolve(objType); 
var prop = viewType.GetProperty("SomeUser"); 
if ((prop != null) && (prop.PropertyType.GetInterfaces().Contains(typeof(IPerson))) 
{ .. } 
+0

Cảm ơn, nhưng tôi nghĩ rằng tôi sẽ đi với Type.IsAssignableFrom. – stiank81

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