您的位置首页百科快答

GetExportedValue和SatisfyImports之间的区别

GetExportedValue和SatisfyImports之间的区别

的有关信息介绍如下:

GetExportedValue和SatisfyImports之间的区别

接口定义

internal interface IPerson

{

string Name { get; set; }

}

具体类定义

[Export(typeof(IPerson))]

[PartCreationPolicy(CreationPolicy.NonShared)]

internal class Man : IPerson

{

public string Name { get; set; }

}

1.使用.net 4.5 中的ExportFactory来实现

#region 1.使用ExportFactory来动态生成新的实例。

[Import]

private ExportFactory _exportFactory;

public IPerson CreateByExportFactory()

{

return _exportFactory.CreateExport().Value;

}

#endregion

2.使用反射的方法来实现

#region 2.使用反射的方法来动态生成新的实例。

[Import(typeof(IPerson))]

private IPerson _person;

public IPerson CreateByReflection()

{

var personTypeName = _person.GetType();

return (IPerson)Activator.CreateInstance(personTypeName);

}

#endregion

3.使用容器来创建新的实例

需要注意的一点是,类型需要加上“[PartCreationPolicy(CreationPolicy.NonShared)]”,否则每次生成的都是同一个实例。

#region 3.使用容器来创建新的实例,类型需要加上“[PartCreationPolicy(CreationPolicy.NonShared)]”,否则每次生成的都是同一个实例。

public IPerson CreateByContainer()

{

return _compositionContainer.GetExportedValue();

}

#endregion