是否可以使用具有静态属性的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);
}
}
但这仅适用于实例对象。 有什么建议吗?
谢谢
答案 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);
但实际上,我会解决您的静态类型设计,看看是否可以将其实现为实例类型。