MEF:[导入]空引用

时间:2013-04-20 11:26:40

标签: c# .net mef caliburn.micro

我在我的一个项目中使用了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以及在哪个地方。

1 个答案:

答案 0 :(得分:1)

您需要使用CompositionContainer来组成或满足对象的导入。

A a = new A();
compositionContainer.ComposeParts(a);

否则,您可以使用CompositionContainer.GetExportXXXX方法之一。这样,MEF将为您创建和组合对象。