Welcome

首页 / 软件开发 / .NET编程技术 / MEF程序设计指南八:部件生命周期(Parts Lifetimeime)托管

MEF程序设计指南八:部件生命周期(Parts Lifetimeime)托管2012-07-13 博客园 BeniaoMEF中的每一个可进行动态装配的导出部件都是具有生命周期的,在没有特别需求的情况下一般都没有对生命周期进行管理,而实际上 MEF已为每一个部件进行了默认的生命周期管理,MEF的生命周期分为三种:Any、Shared及NonShared,被定义在 System.ComponentModel.Composition.CreationPolicy枚举对象中。

namespace System.ComponentModel.Composition
{
public enum CreationPolicy
{
Any = 0,
Shared = 1,
NonShared = 2,
}
}

Any表示可共享或不共享,部件的实例用MEF容器根据不同的请求需求自动控制;Shared表示共享部件,既Shared类型的插件部件可以在 多个MEF组合容器中共用;其次是NonShared类型,表示不共享部件实例,每当有新的请求就会创建一个新的对象实例。在MEF中,通过 PartCreationPolicyAttribute特性实现对部件的生命周期配置。

public interface IBookService
{
string GetBookName();
}
[PartCreationPolicy(CreationPolicy.Any)]
[Export(typeof(IBookService))]
public class MEFBookService : IBookService
{
public string GetBookName()
{
return "《MEF程序设计指南》";
}
}
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export(typeof(IBookService))]
public class ASPNETBookService : IBookService
{
public string GetBookName()
{
return "《ASP.NET项目案例》";
}
}
[PartCreationPolicy(CreationPolicy.Shared)]
[Export(typeof(IBookService))]
public class SLBookService : IBookService
{
public string GetBookName()
{
return "《Silverlight高级编程》";
}
}