MEF用于具有静态特性的组合物

时间:2012-03-06 22:55:01

标签: static mef

是否可以使用具有静态属性的MEF成分?

我通常做的是

MyClass obj = new MyClass();
MEFHelper.Compose(obj);

public class MEFHelper
{
    //....
    public static void Compose(object o)
    {
        var batch = new CompositionBatch();
        batch.AddPart(o);
        _container.Compose(batch);
    }
}

但这仅适用于实例对象。 有什么建议吗?

谢谢

1 个答案:

答案 0 :(得分:6)

我怀疑你需要使用静态属性而不是实例属性。容器的设计方式是自动处理实例,当然,当您使用静态属性时,它无法做到,因为这些属性的生命周期和使用是不确定的。

如果你真的想要组成一个静态属性,你可能需要满足属性本身的导入,例如:

public static class SomeStaticClass
{
    public static SomeObject Instance { get; private set; }
}

SomeStaticClass.Instance = container.GetExportedValue<SomeObject>();

SomeStaticClass.Instance = new SomeObject();
container.SatisfyImportsOnce(SomeStaticClass.Instance);

但实际上,我会解决您的静态类型设计,看看是否可以将其实现为实例类型。