导出 (0) 打印
全部展开
此文章由机器翻译。 将光标移到文章的句子上,以查看原文。 更多信息。
译文
原文

ImportAttribute 类

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

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

命名空间:  System.ComponentModel.Composition
程序集:  System.ComponentModel.Composition(在 System.ComponentModel.Composition.dll 中)

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

ImportAttribute 类型公开以下成员。

  名称说明
公共方法受 可移植类库 支持ImportAttribute()通过导入具有默认协定名称的导出,初始化 ImportAttribute 类的新实例。
公共方法受 可移植类库 支持ImportAttribute(String)通过导入具有指定协定名称的导出,初始化 ImportAttribute 类的新实例。
公共方法受 可移植类库 支持ImportAttribute(Type)通过导入具有派生自指定类型的协定名称的导出,初始化 ImportAttribute 类的新实例。
公共方法受 可移植类库 支持ImportAttribute(String, Type)通过导入具有指定协定名称和类型的导出,初始化 ImportAttribute 类的新实例。
页首

  名称说明
公共属性受 可移植类库 支持AllowDefault获取或设置一个值,该值指示在容器中不存在具有协定名称的导出时,是否将属性、字段或参数设置为其类型的默认值。
公共属性受 可移植类库 支持AllowRecomposition获取或设置一个值,该值指示在容器中具有匹配协定的导出发生更改时,是否将重新组合属性或字段。
公共属性受 可移植类库 支持ContractName获取要导入的导出结果的协定名称。
公共属性受 可移植类库 支持ContractType获取要导入的导出结果的类型。
公共属性受 可移植类库 支持RequiredCreationPolicy获取或设置一个值,该值指示导入程序需要导出结果的特定 CreationPolicy,以满足此导入。
公共属性Source获取或设置指定可能满足此导出的域的值。
公共属性TypeId当在派生类中实现时,获取该 Attribute 的唯一标识符。 (继承自 Attribute。)
页首

  名称说明
公共方法受 可移植类库 支持Equals基础结构。返回一个值,该值指示此实例是否与指定的对象相等。 (继承自 Attribute。)
受保护的方法受 可移植类库 支持Finalize允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
公共方法受 可移植类库 支持GetHashCode返回此实例的哈希代码。 (继承自 Attribute。)
公共方法受 可移植类库 支持GetType获取当前实例的 Type (继承自 Object。)
公共方法IsDefaultAttribute当在派生类中重写时,指示此实例的值是否是派生类的默认值。 (继承自 Attribute。)
公共方法Match当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。 (继承自 Attribute。)
受保护的方法受 可移植类库 支持MemberwiseClone创建当前 Object 的浅表副本。 (继承自 Object。)
公共方法受 可移植类库 支持ToString返回表示当前对象的字符串。 (继承自 Object。)
页首

  名称说明
显式接口实现私有方法_Attribute.GetIDsOfNames将一组名称映射为对应的一组调度标识符。 (继承自 Attribute。)
显式接口实现私有方法_Attribute.GetTypeInfo检索对象的类型信息,然后可以使用该信息获取接口的类型信息。 (继承自 Attribute。)
显式接口实现私有方法_Attribute.GetTypeInfoCount检索对象提供的类型信息接口的数量(0 或 1)。 (继承自 Attribute。)
显式接口实现私有方法_Attribute.Invoke提供对某一对象公开的属性和方法的访问。 (继承自 Attribute。)
页首

在特性化编程模型中,ImportAttribute 用于声明给定部件的导入项或依赖项。 它可以装饰属性、字段或方法。 在组合过程中,部件的导入将通过部件所属的 CompositionContainer 对象填充,使用为该 CompositionContainer 对象提供的导出。

主要通过比较协定名称和协定类型判断导入是否与给定的导出相匹配。 通常,在代码中使用导入特性时不必指定这些对象之一,将自动从经过修饰的成员的类型推断出它们。 如果导入必须与另一类型的导出(如果经过修饰的成员的子类或该成员实现的接口)匹配,则必须显式指定协定类型。 也可以显式指定协定名称,例如要区分多个具有相同类型的协定,但通常最好通过元数据执行此操作。 有关元数据的更多信息,请参见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.5.2、4.5.1、4.5、4

.NET Framework Client Profile

受以下版本支持:4

可移植类库

受以下版本支持:可移植类库

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参阅.NET Framework 系统要求

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

社区附加资源

添加
显示:
© 2014 Microsoft