ImportAttribute Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Określa, że właściwość, pole lub wartość parametru powinna być podana przez obiekt CompositionContainer.
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
- Dziedziczenie
- Atrybuty
Przykłady
W poniższym przykładzie przedstawiono trzy klasy z elementami członkowskimi ozdobionymi elementami i trzema eksportami zgodnymi z ImportAttributenimi.
//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
Uwagi
W modelu ImportAttribute programowania atrybutów służy do deklarowania importów lub zależności danej części. Może udekorować właściwość, pole lub metodę. Podczas tworzenia import części zostanie wypełniony CompositionContainer przez obiekt, do którego należy ta część, przy użyciu eksportów dostarczonych do tego CompositionContainer obiektu.
To, czy import jest zgodny z danym eksportem, zależy przede wszystkim od porównania nazwy kontraktu i typu kontraktu. Zazwyczaj nie trzeba określać jednego z tych atrybutów podczas używania atrybutu importu w kodzie i zostaną one automatycznie wywnioskowane z typu ozdobionego elementu członkowskiego. Jeśli import musi być zgodny z eksportem innego typu (na przykład podklasą typu ozdobionego elementu członkowskiego lub interfejsem zaimplementowanym przez ten element członkowski), należy jawnie określić typ kontraktu. Nazwę kontraktu można również jawnie określić, na przykład w celu odróżnienia wielu kontraktów o tym samym typie, ale zazwyczaj lepiej jest to zrobić za pomocą metadanych. Aby uzyskać więcej informacji na temat metadanych, zobacz PartMetadataAttribute.
Konstruktory
| Nazwa | Opis |
|---|---|
| ImportAttribute() |
Inicjuje ImportAttribute nowe wystąpienie klasy, importując eksport z domyślną nazwą kontraktu. |
| ImportAttribute(String, Type) |
Inicjuje ImportAttribute nowe wystąpienie klasy, importując eksport z określoną nazwą i typem kontraktu. |
| ImportAttribute(String) |
Inicjuje ImportAttribute nowe wystąpienie klasy, importując eksport z określoną nazwą kontraktu. |
| ImportAttribute(Type) |
Inicjuje nowe wystąpienie ImportAttribute klasy, importując eksport z nazwą kontraktu pochodzącą z określonego typu. |
Właściwości
| Nazwa | Opis |
|---|---|
| AllowDefault |
Pobiera lub ustawia wartość wskazującą, czy właściwość, pole lub parametr zostaną ustawione na wartość domyślną jego typu, gdy eksport o nazwie kontraktu nie jest obecny w kontenerze. |
| AllowRecomposition |
Pobiera lub ustawia wartość wskazującą, czy właściwość lub pole zostaną ponownie skompilowane, gdy eksporty z pasującym kontraktem uległy zmianie w kontenerze. |
| ContractName |
Pobiera nazwę kontraktu eksportu do zaimportowania. |
| ContractType |
Pobiera typ eksportu do zaimportowania. |
| RequiredCreationPolicy |
Pobiera lub ustawia wartość wskazującą, że importer wymaga określonego CreationPolicy dla eksportu użytego do spełnienia tego importu. |
| Source |
Pobiera lub ustawia wartość określającą zakresy, z których ten import może być spełniony. |
| TypeId |
Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attribute. (Odziedziczone po Attribute) |
Metody
| Nazwa | Opis |
|---|---|
| Equals(Object) |
Zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi. (Odziedziczone po Attribute) |
| GetHashCode() |
Zwraca kod skrótu dla tego wystąpienia. (Odziedziczone po Attribute) |
| GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
| IsDefaultAttribute() |
Po zastąpieniu w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną dla klasy pochodnej. (Odziedziczone po Attribute) |
| Match(Object) |
Po zastąpieniu w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi. (Odziedziczone po Attribute) |
| MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
| ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Jawne implementacje interfejsu
| Nazwa | Opis |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania. (Odziedziczone po Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Pobiera informacje o typie obiektu, którego można użyć do uzyskania informacji o typie dla interfejsu. (Odziedziczone po Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1). (Odziedziczone po Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Zapewnia dostęp do właściwości i metod uwidocznionych przez obiekt. (Odziedziczone po Attribute) |