ImportAttribute ImportAttribute ImportAttribute ImportAttribute Class

Definizione

Specifica che una proprietà, un campo o un valore di parametro deve essere fornito dall'oggetto CompositionContainer.Specifies that a property, field, or parameter value should be provided by the CompositionContainer.object

public ref class ImportAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property, AllowMultiple=false, Inherited=false)]
[System.AttributeUsage(System.AttributeTargets.Property | System.AttributeTargets.Field | System.AttributeTargets.Parameter, AllowMultiple=false, Inherited=false)]
public class ImportAttribute : Attribute
type ImportAttribute = class
    inherit Attribute
Public Class ImportAttribute
Inherits Attribute
Ereditarietà
ImportAttributeImportAttributeImportAttributeImportAttribute
Attributi

Esempi

Nell'esempio seguente vengono illustrate tre classi con membri decorati con ImportAttributee tre esportazioni corrispondenti.The following example shows three classes with members decorated with the ImportAttribute, and three exports that match them.

//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

Commenti

Nel modello di programmazione con attributi, ImportAttribute viene usato per dichiarare le importazioni, o dipendenze, di una parte specificata.In the Attributed Programming Model, the ImportAttribute is used to declare the imports, or dependencies, of a given part. Può decorare una proprietà, un campo o un metodo.It can decorate a property, a field, or a method. Durante la composizione, le CompositionContainer importazioni di una parte verranno compilate dall'oggetto a cui appartiene tale parte, usando le esportazioni fornite a tale CompositionContainer oggetto.During composition, a part's imports will be filled by the CompositionContainer object to which that part belongs, by using the exports provided to that CompositionContainer object.

Se un'importazione corrisponde a una determinata esportazione viene determinata principalmente confrontando il nome del contratto e il tipo di contratto.Whether an import matches a given export is determined primarily by comparing the contract name and the contract type. In genere, non è necessario specificarne uno quando si usa l'attributo Import nel codice e verranno dedotti automaticamente dal tipo del membro decorato.Ordinarily, you do not have to specify either of these when using the import attribute in code, and they will be automatically inferred from the type of the decorated member. Se l'importazione deve corrispondere a un'esportazione di un tipo diverso, ad esempio una sottoclasse del tipo del membro decorato o un'interfaccia implementata da tale membro, è necessario specificare in modo esplicito il tipo di contratto.If the import must match an export of a different type (for example, a subclass of the type of the decorated member, or an interface implemented by that member), then the contract type must be explicitly specified. Il nome del contratto può anche essere specificato in modo esplicito, ad esempio per distinguere più contratti con lo stesso tipo, ma in genere è preferibile eseguire questa operazione tramite i metadati.The contract name can also be explicitly specified, for example to distinguish between multiple contracts with the same type, but it is usually better to do this through metadata. Per ulteriori informazioni sui metadati, vedere PartMetadataAttribute.For more information about metadata, see PartMetadataAttribute.

Costruttori

ImportAttribute() ImportAttribute() ImportAttribute() ImportAttribute()

Inizializza una nuova istanza della classe ImportAttribute, che imposta l'esportazione con il nome di contratto predefinito.Initializes a new instance of the ImportAttribute class, importing the export with the default contract name.

ImportAttribute(String) ImportAttribute(String) ImportAttribute(String) ImportAttribute(String)

Inizializza una nuova istanza della classe ImportAttribute, che importa l'esportazione con il nome di contratto specificato.Initializes a new instance of the ImportAttribute class, importing the export with the specified contract name.

ImportAttribute(String, Type) ImportAttribute(String, Type) ImportAttribute(String, Type) ImportAttribute(String, Type)

Inizializza una nuova istanza della classe ImportAttribute, che importa l'esportazione con il nome e il tipo di contratto specificati.Initializes a new instance of the ImportAttribute class, importing the export with the specified contract name and type.

ImportAttribute(Type) ImportAttribute(Type) ImportAttribute(Type) ImportAttribute(Type)

Inizializza una nuova istanza della classe ImportAttribute, che importa l'esportazione con il nome di contratto derivato dal tipo specificato.Initializes a new instance of the ImportAttribute class, importing the export with the contract name derived from the specified type.

Proprietà

AllowDefault AllowDefault AllowDefault AllowDefault

Ottiene o imposta un valore che indica se la proprietà, il campo o il parametro verrà impostato sul valore predefinito del relativo tipo quando un'esportazione con il nome del contratto non è presente nel contenitore.Gets or sets a value that indicates whether the property, field, or parameter will be set to its type's default value when an export with the contract name is not present in the container.

AllowRecomposition AllowRecomposition AllowRecomposition AllowRecomposition

Ottiene o imposta un valore che indica se la proprietà o il campo sarà ricomposto quando le esportazioni con contratto corrispondente vengono modificate nel contenitore.Gets or sets a value that indicates whether the property or field will be recomposed when exports with a matching contract have changed in the container.

ContractName ContractName ContractName ContractName

Ottiene il nome del contratto dell'esportazione da importare.Gets the contract name of the export to import.

ContractType ContractType ContractType ContractType

Ottiene il tipo dell'esportazione da importare.Gets the type of the export to import.

RequiredCreationPolicy RequiredCreationPolicy RequiredCreationPolicy RequiredCreationPolicy

Ottiene o imposta un valore che indica che l'utilità di importazione richiede un oggetto CreationPolicy specifico per le esportazioni utilizzate per soddisfare questa importazione.Gets or sets a value that indicates that the importer requires a specific CreationPolicy for the exports used to satisfy this import.

Source Source Source Source

Ottiene o imposta un valore che specifica gli ambiti da cui questa importazione può essere soddisfatta.Gets or sets a value that specifies the scopes from which this import may be satisfied.

TypeId TypeId TypeId TypeId

Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)

Metodi

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.Returns a value that indicates whether this instance is equal to a specified object.

(Inherited from Attribute)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Restituisce il codice hash per l'istanza.Returns the hash code for this instance.

(Inherited from Attribute)
GetType() GetType() GetType() GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Inherited from Object)
IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute()

In caso di override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Inherited from Attribute)
Match(Object) Match(Object) Match(Object) Match(Object)

Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Inherited from Attribute)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Inherited from Object)

Implementazioni dell'interfaccia esplicita

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch.Maps a set of names to a corresponding set of dispatch identifiers.

(Inherited from Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera le informazioni sul tipo relative a un oggetto, che possono essere usate per ottenere informazioni sul tipo relative a un'interfaccia.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Inherited from Attribute)
_Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32)

Recupera il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Inherited from Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso a proprietà e metodi esposti da un oggetto.Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

Si applica a

Vedi anche