本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

ImportAttribute 类

 

指定应由提供属性、 字段或参数值 CompositionContainer对象。

命名空间:   System.ComponentModel.Composition
程序集:  System.ComponentModel.Composition(位于 System.ComponentModel.Composition.dll)

System.Object
  System.Attribute
    System.ComponentModel.Composition.ImportAttribute

[AttributeUsageAttribute(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, 
	AllowMultiple = false, Inherited = false)]
public class ImportAttribute : Attribute

名称说明
System_CAPS_pubmethodImportAttribute()

新实例初始化 ImportAttribute 类中,导入具有默认的协定名称的导出。

System_CAPS_pubmethodImportAttribute(String)

新实例初始化 ImportAttribute 类中,导入具有指定的协定名称的导出。

System_CAPS_pubmethodImportAttribute(String, Type)

新实例初始化 ImportAttribute 类中,导入具有指定的协定名称和类型的导出。

System_CAPS_pubmethodImportAttribute(Type)

新实例初始化 ImportAttribute 类,导入导出的协定名称派生自指定的类型。

名称说明
System_CAPS_pubpropertyAllowDefault

获取或设置一个值,该值指示是否属性、 字段或参数将设置为其类型的默认值不存在的容器中导出的协定名称时。

System_CAPS_pubpropertyAllowRecomposition

获取或设置一个值,该值指示在容器中使用匹配协定的导出已更改时被重排属性或字段。

System_CAPS_pubpropertyContractName

获取要导入导出的协定名称。

System_CAPS_pubpropertyContractType

获取要导入导出的类型。

System_CAPS_pubpropertyRequiredCreationPolicy

获取或设置一个值,该值指示导入程序需要特定 CreationPolicy 对用来满足此导入导出。

System_CAPS_pubpropertySource

获取或设置一个值,指定可以从中满足此导入的作用域。

System_CAPS_pubpropertyTypeId

在派生类中实现时,获取此 Attribute 的唯一标识符。(继承自 Attribute。)

名称说明
System_CAPS_pubmethodEquals(Object)

此 API 支持 产品 基础结构,不应从代码直接使用。 返回一个值,该值指示此实例是否与指定的对象相等。(继承自 Attribute。)

System_CAPS_protmethodFinalize()

在垃圾回收将某一对象回收前允许该对象尝试释放资源并执行其他清理操作。(继承自 Object。)

System_CAPS_pubmethodGetHashCode()

返回此实例的哈希代码。(继承自 Attribute。)

System_CAPS_pubmethodGetType()

获取当前实例的 Type(继承自 Object。)

System_CAPS_pubmethodIsDefaultAttribute()

在派生类中重写时,指示此实例的值是否是派生类的默认值。(继承自 Attribute。)

System_CAPS_pubmethodMatch(Object)

当在派生类中重写时返回一个值,该值指示此实例是否等于指定的对象。(继承自 Attribute。)

System_CAPS_protmethodMemberwiseClone()

创建当前 Object 的浅表副本。(继承自 Object。)

System_CAPS_pubmethodToString()

返回表示当前对象的字符串。(继承自 Object。)

名称说明
System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

将一组名称映射为对应的一组调度标识符。(继承自 Attribute。)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

检索对象的类型信息,然后可以使用该信息获取接口的类型信息。(继承自 Attribute。)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfoCount(UInt32)

检索对象提供的类型信息接口的数量(0 或 1)。(继承自 Attribute。)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

提供对某一对象公开的属性和方法的访问。(继承自 Attribute。)

在特性化编程模型中, ImportAttribute 用来声明导入或给定部件的依赖关系。 它可以修饰属性、 字段或方法。 在组合期间,部件的导入将数据填充 CompositionContainer 所属的对象的该部分,通过使用与提供的导出 CompositionContainer 对象。

导入是否与给定的导出匹配由主要通过比较结果的协定名称和协定类型。 一般情况下,无需指定其中任何一种在代码中,使用 import 特性时,它们将自动推断从经过修饰的成员的类型。 如果导入必须与另一类型 (例如,经过修饰的成员或该成员所实现的接口的类型的子类) 的导出匹配,则该协定类型必须显式指定。 协定名称还可显式指定,例如,若要区分具有相同类型的多个协定,但通常最好执行此操作通过元数据。 有关元数据的详细信息,请参阅 PartMetadataAttribute

下面的示例演示三个类与成员使用修饰 ImportAttribute, ,并将其进行匹配的三个导出。

//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();

    }
}

.NET Framework
自 4.0 起可用
可移植类库
可移植 .NET 平台 中受支持
Silverlight
自 4.0 起可用

此类型的所有公共静态(Visual Basic 中的 已共享 在 Visual Basic 中)成员都是线程安全的。不保证所有实例成员都是线程安全的。

返回页首
显示: