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

bza*_*fir 2 static mef

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

我通常做的是

MyClass obj = new MyClass();
MEFHelper.Compose(obj);
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Mat*_*ott 6

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

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

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

SomeStaticClass.Instance = container.GetExportedValue<SomeObject>();
Run Code Online (Sandbox Code Playgroud)

要么

SomeStaticClass.Instance = new SomeObject();
container.SatisfyImportsOnce(SomeStaticClass.Instance);
Run Code Online (Sandbox Code Playgroud)

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