我用的是Caliburn。在我的一个项目中使用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
}
}
当我运行应用程序时,logger从未设置或只是等于null。
奇怪的是,如果我像下面这样在根视图模型中添加一个导入,并在那里设置一个断点,它就会正常工作:[Import]
public ILogger logger {get; set;}
然而,当我按F5继续,logger原来是空的,当涉及到类a。我想知道为什么logger的值被设置为空,在哪个地方
您需要使用CompositionContainer
来组成或满足对象的导入。
A a = new A();
compositionContainer.ComposeParts(a);
否则,您可以使用CompositionContainer.GetExportXXXX
方法之一。这样,MEF将为您创建和组合对象。