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 будет создавать и составлять объект для вас.