MEF: [импорт] пустая ссылка

Я использую Caliburn.Micro с MEF в одном из моих проектов. Я могу получить импорт в корневой viewmodel. Но если я хочу получить импорт в некоторые другие классы, он не будет работать. Например:

[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 никогда не устанавливается или равен нулю.

Странно, если я добавлю импорт в корневую модель представления следующим образом и установлю там точку останова, это будет работать как-то так:

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

Однако, когда я нажимаю F5, чтобы продолжить, logger оказывается нулевым, когда дело доходит до класса A. Мне интересно, почему значение logger установлено в null и в каком месте.

1 ответ

Вам нужно использовать CompositionContainer составить или удовлетворить импорт объекта.

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

В противном случае вы можете использовать один из CompositionContainer.GetExportXXXX методы. Таким образом, MEF будет создавать и составлять объект для вас.

Другие вопросы по тегам