是否可以使用具有静态特性的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)
但这仅适用于实例对象.有什么建议吗?
谢谢
我怀疑你需要使用静态属性而不是实例属性.容器的设计方式是自动处理实例,当然,当您使用静态属性时,它无法做到,因为这些属性的生命周期和使用是不确定的.
如果你真的想要组成一个静态属性,你可能需要满足属性本身的导入,例如:
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)
但实际上,我会解决您的静态类型设计,看看是否可以将其实现为实例类型.