Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
1131
Assunto : .NET
Titulo: Identificar métodos em toda uma hierarquia de interfaces

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



É comum em arquiteturas de software utilizarmos hierarquias de interfaces nas camas. Interfaces mais simples sendo herdadas por mais complexas.

Quando surge a necessidade de fazer reflection, porém, a coisa complica : Recursos padrões usados em reflection, tal como GetMethods, não conseguem navegar em uma hierarquia de interfaces, trazendo uma resposta plana de apenas um nível. Os parâmetros que funcionam para uma hierarquia de classes não funcionam para uma hierarquia de interfaces.

Para resolver isso e podermos capturar todos os métodos que uma interface possui em toda a sua hierarquia precisamos nós mesmos criar um método que, via reflection, navegue pela hierarquia, capturando tudo.

Veja como fica :

// Identificar métodos em toda a hierarquia de interfaces
public static MethodInfo[] GetPublicMethods(Type type, BindingFlags filtro)
{
if (type.IsInterface)
{
var propertyInfos = new List<MethodInfo>();

var considered = new List<Type>();
var queue = new Queue<Type>();
considered.Add(type);
queue.Enqueue(type);
while (queue.Count > 0)
{
var subType = queue.Dequeue();
foreach (var subInterface in subType.GetInterfaces())
{
if (considered.Contains(subInterface)) continue;

considered.Add(subInterface);
queue.Enqueue(subInterface);
}

var typeProperties = subType.GetMethods(filtro);

var newPropertyInfos = typeProperties
.Where(x => !propertyInfos.Contains(x));

propertyInfos.InsertRange(0, newPropertyInfos);
}

return propertyInfos.ToArray();
}

return type.GetMethods(filtro);
}

Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
Nenhum comentário foi realizado ainda. Seja o primeiro !
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br