我在我的一个项目中使用了Caliburn.Micro和MEF。我可以在根视图模型中获得导入。但是,如果我想将导入到其他一些类中,它将无法工作。例如:
[Export]
public class A
{
[Import]
static ILogger logger;
public static void SomeMethod()
{
logger.Log("foobar");
}
}
和...
[Export(typeof(ILogger))]
public class FileLogger : ILogger
{
public void Log()
{
//some implementations
}
}
当我运行应用程序时,记录器永远不会设置或只等于null。
奇怪的是,如果我将导入添加到根视图模型中,并在那里设置断点,它会以某种方式工作:
[Import]
public ILogger logger {get; set;}
然而,当我按F5继续时,记录器在A类时变为null。我想知道为什么logger的值被设置为null以及在哪个地方。
答案 0 :(得分:1)
您需要使用CompositionContainer
来组成或满足对象的导入。
A a = new A();
compositionContainer.ComposeParts(a);
否则,您可以使用CompositionContainer.GetExportXXXX
方法之一。这样,MEF将为您创建和组合对象。