2013-05-18 3 views
2

J'ai une classe Member dans un projet. Je trouve cette classe en utilisant powershell sur la console du gestionnaire de paquets dans Visual Studio.Comment déterminer si un type implémente une interface dans Powershell

public class Member : ICacheable 
{ 
    public string FirstName; 
    public string LastName; 
    ... 
} 

Il imprime quelque chose comme ci-dessous. Comment vérifier cette classe est assignable à ICacheable ou non. Actaully J'essaye de trouver toutes les classes qui implémente ICacheable mais je ne pourrais trouver aucune propriété qui m'aidera à trouver ceci.

IsDirty    : False 
FileCount   : 1 
Name     : Member.cs 
Collection   : System.__ComObject 
Properties   : System.__ComObject 
DTE     : System.__ComObject 
Kind     : {6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C} 
ProjectItems   : System.__ComObject 
Object    : System.__ComObject 
ExtenderNames  : {} 
ExtenderCATID  : {610D4615-D0D5-11D2-8599-006097C68E81} 
Saved    : True 
ConfigurationManager : 
FileCodeModel  : System.__ComObject 
Document    : System.__ComObject 
SubProject   : 
ContainingProject : System.__ComObject 

UPDATE (SOLUTION)

Note: $ memberItem est un ProjectItem que je vous ai montré au-dessus.

$memberItem.FileCodeModel.CodeElements | % { $_.Children | % { $_.ImplementedInterfaces } } 


DTE   : System.__ComObject 
Collection : System.__ComObject 
Name   : ICacheable 
FullName  : ApplicationBase.Core.Interface.ICacheable 
ProjectItem : 
Kind   : 8 
IsCodeType : True 
InfoLocation : 2 
Children  : 
Language  : {B5E9BD34-6D3E-4B5D-925E-8A43B79820B4} 
StartPoint : 
EndPoint  : 
ExtenderNames : {ExternalLocation} 
ExtenderCATID : 
Parent  : System.__ComObject 
Namespace  : System.__ComObject 
Bases   : System.__ComObject 
Members  : System.__ComObject 
Access  : 1 
Attributes : System.__ComObject 
DocComment : 
Comment  : 
DerivedTypes : 
IsGeneric  : False 
DataTypeKind : 1 
Parts   : 

Répondre

4

Je ne sais pas comment les choses fonctionnent dans la console de gestionnaire de paquets, mais dans Powershell, vous pouvez vérifier si un type compilé (et chargé) implémente des interfaces en utilisant la propriété implementedinterfaces. Ex. avec array -type:

#[array].ImplementedInterfaces.Contains([System.Collections.ICollection]) 
[array].ImplementedInterfaces.Contains([type]"System.Collections.Icollection") 
True 

Vous pouvez voir toutes les interfaces mises en œuvre avec:

[array].ImplementedInterfaces 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  False ICloneable 
True  False IList 
True  False ICollection 
True  False IEnumerable 
True  False IStructuralComparable 
True  False IStructuralEquatable 
+0

Je vérifie, et cela fonctionne aussi sur la console de gestionnaire de paquets. Cela me donne une idée. Ensuite, je devrais obtenir le type pour atteindre la propriété ImplementedInterfaces. Je le cherche maintenant. –

+1

Vous m'avez donné l'idée puis j'ai trouvé la solution. J'ai ajouté une solution à la question. Merci. –

Questions connexes