MEF学习系列(5): 创建策略(Creation Policy)和生命周期(Life Cycle)

前言

在前面的介绍中我们已经知道:导入和导出的匹配需要ContractType,ContractName,Metadata都匹配,这里我们还要介绍一个新东西:创建策略(Creation Policy)。有时候我们在容器中的实例在每一个导入之间共享,即单例;有时候我们需要让每一个导入都拥有一个各自的实例,这在MEF中就是由创建策略决定的。

声明周期(Life Cycle),每一个MEF的部件在容器中都有自己的生命周期,何时创建,何时释放登。本文主要介绍一下MEF中创建策略和生命周期。

创建策略

创建策略,其实就是组合容器决定如何创建部件。在组合容器组合部件时,如果导入和导出匹配成功,则组合容器会将导入成员的值设置成为导出的实例。因此,导出部件的创建策略决定了部件来源于何处:是现有实例还是新实例。

MEF的创建策略有:Shared(共享)和NonShared(非共享)。

使用Shared创建策略的部件将在每一个导入部件中共享实例。仅当容器中没有该部件的实例时才会创建新实例。使用共享策略创建的部件可以是提供服务的部件,以及较占用内存的部件。他们的内部状态应该尽可能少得受外界影响。

使用NonShared创建策略的部件在匹配每一个导入时都会有新的实例。这些部件的内部状态都是相互独立的,当某些部件需要保持特定的状态时可以使用这种策略。

MEF关于创建策略提供的特性有3种:Shared、NonShared、Any(请注意Any和Shared的区别,创建策略只有两种)。导入和导出的默认值都是Any。当导入导出都是用默认创建策略,或者都是默认,MEF将默认创建策略为Shard。创建策略的匹配与否也决定了导出部件和导入能否成功匹配。以下情况可视为匹配成功:

1. 策略标记为Any的导出部件可以与任何导入部件策略(Shared,NonShared,Any,默认)匹配成功。

2. 策略标记为Shared的导出部件可以与标记为Shared、Any和默认(也就是什么都不写只有[Import])的导入部件匹配成功。唯独不能与NonShared导入部件匹配成功。

3. 策略标记为NonShared的导出部件可以与标记为NonShared、Any和默认(也就是什么都不写只有[Import])的导入部件匹配成功。唯独不能与Shared导入部件匹配成功。

DEMO源代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentMode
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值