1

我在我的一个项目中将 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
    }
}

当我运行应用程序时,logger 永远不会被设置或只是等于 null。

奇怪的是,如果我按如下方式将导入添加到根视图模型并在那里设置断点,它会以某种方式工作:

[Import]
public ILogger logger {get; set;}

但是,当我按 F5 继续时,对于 A 类,logger 原来为 null。我想知道为什么 logger 的值设置为 null 以及在哪个位置。

4

1 回答 1

1

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

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

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

于 2013-04-21T22:07:03.127 回答