MEF - 将默认创建策略更改为 NonShared

4
我目前正在使用MEF扫描/组合应用程序的扩展。我想将默认的创建策略更改为非共享(而不是共享),但是希望可以通过属性覆盖创建策略。换句话说,如果我在导出时没有指定创建策略,我希望MEF使用非共享。
我的先前实现不再适用于我,因为它会更改所有导入所需的创建策略。因此,如果我覆盖创建策略,则无法组成导出。
我已经搜索了一些资料,最接近的是RegistrationBuilder,但我在VS2010中使用.NET 4(因此是MEF 1)。我也无法找到ExportProviders的方法。
非常感谢您的帮助!提前致谢!

我还没有尝试过TransientCompositionContainer,但它似乎将CreationPolicy.Any(默认)更改为CreationPolicy.NonShared。因此,具有显式CreationPolicy.Shared的导入应该仍然有效,而其他所有内容都应该是短暂的。 - Panos Rontogiannis
另一种方法(虽然我从未尝试过)是创建一个自定义导入属性(这应该类似于自定义导出属性指南http://mef.codeplex.com/wikipage?title=Exports%20and%20Metadata),并将RequiredCreationPolicy设置为默认的NonShared。然后更新所有使用此属性的导入。显然,这不像TransientCompositionContainer那样优雅。 - Panos Rontogiannis
1个回答

0

我已经成功创建了一个MEF包装器,并将其用作应用程序引导程序。 在使用MEF的项目中,我有自定义属性,用于控制实例化模式。 自定义属性的实现方式如下:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
public class BusinessLogicImportAttribute : ConstraintImportAttribute
{
    public BusinessLogicImportAttribute()
        : base(typeof(IBusinessController))
    {
        base.RequiredCreationPolicy = RequiredCreationPolicy = CreationPolicy.NonShared;
    }
}

谢谢,我会试一试! - pdalbe01

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接