用于具有静态性能的组合物的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);
    }
}

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

感谢

我会质疑您是否需要使用静态属性而不是实例属性。容器的设计方式是自动处理实例,当然在使用静态属性时不能这样做,因为这些属性的生存期和用法是不确定的。

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

public static class SomeStaticClass
{
    public static SomeObject Instance { get; private set; }
}
SomeStaticClass.Instance = container.GetExportedValue<SomeObject>();

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

不过,现实地说,我会讨论静态类型的设计,看看是否可以将其实现为实例类型。

最新更新