ImportAttribute Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee geeft u op dat een eigenschap, veld of parameterwaarde moet worden opgegeven door het CompositionContainer.object.
public ref class ImportAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property, AllowMultiple=false, Inherited=false)]
public class ImportAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property, AllowMultiple=false, Inherited=false)>]
type ImportAttribute = class
inherit Attribute
Public Class ImportAttribute
Inherits Attribute
- Overname
- Kenmerken
Voorbeelden
In het volgende voorbeeld ziet u drie klassen met leden die zijn ingericht met de ImportAttribute, en drie exports die overeenkomen met de klassen.
//Default export infers type and contract name from the
//exported type. This is the preferred method.
[Export]
public class MyExport1
{
public String data = "Test Data 1.";
}
public class MyImporter1
{
[Import]
public MyExport1 importedMember { get; set; }
}
public interface MyInterface
{
}
//Specifying the contract type may be important if
//you want to export a type other then the base type,
//such as an interface.
[Export(typeof(MyInterface))]
public class MyExport2 : MyInterface
{
public String data = "Test Data 2.";
}
public class MyImporter2
{
//The import must match the contract type!
[Import(typeof(MyInterface))]
public MyExport2 importedMember { get; set; }
}
//Specifying a contract name should only be
//needed in rare caes. Usually, using metadata
//is a better approach.
[Export("MyContractName", typeof(MyInterface))]
public class MyExport3 : MyInterface
{
public String data = "Test Data 3.";
}
public class MyImporter3
{
//Both contract name and type must match!
[Import("MyContractName", typeof(MyInterface))]
public MyExport3 importedMember { get; set; }
}
class Program
{
static void Main(string[] args)
{
AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(typeof(MyExport1).Assembly));
CompositionContainer _container = new CompositionContainer(catalog);
MyImporter1 test1 = new MyImporter1();
MyImporter2 test2 = new MyImporter2();
MyImporter3 test3 = new MyImporter3();
_container.SatisfyImportsOnce(test1);
_container.SatisfyImportsOnce(test2);
_container.SatisfyImportsOnce(test3);
Console.WriteLine(test1.importedMember.data);
Console.WriteLine(test2.importedMember.data);
Console.WriteLine(test3.importedMember.data);
Console.ReadLine();
}
}
'Default export infers type and contract name from the
'exported type. This is the preferred method.
<Export()>
Public Class MyExport1
Public ReadOnly Property data As String
Get
Return "Test Data 1."
End Get
End Property
End Class
Public Class MyImporter1
<Import()>
Public Property ImportedMember As MyExport1
End Class
Public Interface MyInterface
End Interface
'Specifying the contract type may be important if
'you want to export a type other then the base type,
'such as an interface.
<Export(GetType(MyInterface))>
Public Class MyExport2
Implements MyInterface
Public ReadOnly Property data As String
Get
Return "Test Data 2."
End Get
End Property
End Class
Public Class MyImporter2
'The import must match the contract type!
<Import(GetType(MyInterface))>
Public Property ImportedMember As MyExport2
End Class
'Specifying a contract name should only be
'needed in rare caes. Usually, using metadata
'is a better approach.
<Export("MyContractName", GetType(MyInterface))>
Public Class MyExport3
Implements MyInterface
Public ReadOnly Property data As String
Get
Return "Test Data 3."
End Get
End Property
End Class
Public Class MyImporter3
'Both contract name and type must match!
<Import("MyContractName", GetType(MyInterface))>
Public Property ImportedMember As MyExport3
End Class
Sub Main()
Dim catalog As AggregateCatalog = New AggregateCatalog()
catalog.Catalogs.Add(New AssemblyCatalog(GetType(MyExport1).Assembly))
Dim container As CompositionContainer = New CompositionContainer(catalog)
Dim test1 As MyImporter1 = New MyImporter1()
Dim test2 As MyImporter2 = New MyImporter2()
Dim test3 As MyImporter3 = New MyImporter3()
container.SatisfyImportsOnce(test1)
container.SatisfyImportsOnce(test2)
container.SatisfyImportsOnce(test3)
Console.WriteLine(test1.ImportedMember.data)
Console.WriteLine(test2.ImportedMember.data)
Console.WriteLine(test3.ImportedMember.data)
Console.ReadLine()
End Sub
Opmerkingen
In het kenmerkprogrammeermodel wordt het ImportAttribute gebruikt om de invoer of afhankelijkheden van een bepaald deel te declareren. Het kan een eigenschap, een veld of een methode versieren. Tijdens de samenstelling worden de invoer van een deel ingevuld door het CompositionContainer object waartoe dat deel behoort, met behulp van de uitvoer die aan dat CompositionContainer object is verstrekt.
Of een import overeenkomt met een bepaalde export wordt voornamelijk bepaald door de contractnaam en het contracttype te vergelijken. Normaal gesproken hoeft u geen van beide op te geven bij het gebruik van het importkenmerk in code en worden ze automatisch afgeleid van het type versierlid. Als het importeren moet overeenkomen met een export van een ander type (bijvoorbeeld een subklasse van het type van het versierde lid of een interface die door dat lid wordt geïmplementeerd), moet het contracttype expliciet worden opgegeven. De naam van het contract kan ook expliciet worden opgegeven, bijvoorbeeld om onderscheid te maken tussen meerdere contracten met hetzelfde type, maar dit is meestal beter via metagegevens. Zie voor meer informatie over metagegevens PartMetadataAttribute.
Constructors
| Name | Description |
|---|---|
| ImportAttribute() |
Initialiseert een nieuw exemplaar van de ImportAttribute klasse, waarbij de export wordt geïmporteerd met de standaardcontractnaam. |
| ImportAttribute(String, Type) |
Initialiseert een nieuw exemplaar van de ImportAttribute klasse, waarbij de export wordt geïmporteerd met de opgegeven contractnaam en het opgegeven type. |
| ImportAttribute(String) |
Initialiseert een nieuw exemplaar van de ImportAttribute klasse, waarbij de export wordt geïmporteerd met de opgegeven contractnaam. |
| ImportAttribute(Type) |
Initialiseert een nieuw exemplaar van de ImportAttribute klasse, waarbij de export wordt geïmporteerd met de contractnaam die is afgeleid van het opgegeven type. |
Eigenschappen
| Name | Description |
|---|---|
| AllowDefault |
Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of de eigenschap, het veld of de parameter wordt ingesteld op de standaardwaarde van het type wanneer een export met de contractnaam niet aanwezig is in de container. |
| AllowRecomposition |
Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of de eigenschap of het veld opnieuw wordt gecomcomposeerd wanneer exports met een overeenkomend contract zijn gewijzigd in de container. |
| ContractName |
Hiermee haalt u de contractnaam van de export op die moet worden geïmporteerd. |
| ContractType |
Hiermee haalt u het type export op dat moet worden geïmporteerd. |
| RequiredCreationPolicy |
Hiermee wordt een waarde opgehaald of ingesteld die aangeeft dat de importeur een specifieke CreationPolicy waarde vereist voor de export die wordt gebruikt om aan deze import te voldoen. |
| Source |
Hiermee wordt een waarde opgehaald of ingesteld waarmee de bereiken worden opgegeven waaruit aan deze import kan worden voldaan. |
| TypeId |
Wanneer deze wordt geïmplementeerd in een afgeleide klasse, krijgt u Attributehiervoor een unieke id. (Overgenomen van Attribute) |
Methoden
| Name | Description |
|---|---|
| Equals(Object) |
Retourneert een waarde die aangeeft of dit exemplaar gelijk is aan een opgegeven object. (Overgenomen van Attribute) |
| GetHashCode() |
Retourneert de hash-code voor dit exemplaar. (Overgenomen van Attribute) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| IsDefaultAttribute() |
Wanneer deze wordt overschreven in een afgeleide klasse, geeft u aan of de waarde van dit exemplaar de standaardwaarde is voor de afgeleide klasse. (Overgenomen van Attribute) |
| Match(Object) |
Wanneer deze wordt overschreven in een afgeleide klasse, wordt een waarde geretourneerd die aangeeft of dit exemplaar gelijk is aan een opgegeven object. (Overgenomen van Attribute) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |
Expliciete interface-implementaties
| Name | Description |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Hiermee wordt een set namen toegewezen aan een bijbehorende set verzend-id's. (Overgenomen van Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Hiermee haalt u de typegegevens voor een object op, die kan worden gebruikt om de typegegevens voor een interface op te halen. (Overgenomen van Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Hiermee wordt het aantal type-informatieinterfaces opgehaald dat een object biedt (0 of 1). (Overgenomen van Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Biedt toegang tot eigenschappen en methoden die door een object worden weergegeven. (Overgenomen van Attribute) |