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