Udostępnij za pośrednictwem


ImportAttribute Klasa

Definicja

Określa, że właściwość, pole lub wartość parametru powinna być podana CompositionContainerprzez obiekt .

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
ImportAttribute
Atrybuty

Przykłady

W poniższym przykładzie przedstawiono trzy klasy z elementami członkowskimi ozdobionymi elementami ImportAttribute, a trzy eksporty pasują do nich.

//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 przypisanego element służy do deklarowania importu lub zależności danej części. Może ozdobić właściwość, pole lub metodę. Podczas kompozycji import części zostanie wypełniony przez CompositionContainer 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, jest określany przede wszystkim przez porównanie 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 z tym samym typem, ale zazwyczaj lepiej to zrobić za pomocą metadanych. Aby uzyskać więcej informacji na temat metadanych, zobacz PartMetadataAttribute.

Konstruktory

ImportAttribute()

Inicjuje ImportAttribute nowe wystąpienie klasy, importując eksport z domyślną nazwą kontraktu.

ImportAttribute(String)

Inicjuje ImportAttribute nowe wystąpienie klasy, importując eksport o określonej nazwie kontraktu.

ImportAttribute(String, Type)

Inicjuje ImportAttribute nowe wystąpienie klasy, importując eksport o określonej nazwie kontraktu i typie.

ImportAttribute(Type)

Inicjuje ImportAttribute nowe wystąpienie klasy, importując eksport z nazwą kontraktu pochodzącą z określonego typu.

Właściwości

AllowDefault

Pobiera lub ustawia wartość wskazującą, czy właściwość, pole lub parametr zostanie ustawiony na wartość domyślną 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żywanego 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 elementu Attribute.

(Odziedziczone po Attribute)

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca wartość skrótu dla tego wystąpienia.

(Odziedziczone po Attribute)
GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
IsDefaultAttribute()

W przypadku zastąpienia w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną klasy pochodnej.

(Odziedziczone po Attribute)
Match(Object)

W przypadku zastąpienia 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

_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 pobrania informacji o typie 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)

Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt.

(Odziedziczone po Attribute)

Dotyczy

Zobacz też