2013-04-20 4 views
1

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

[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 
    } 
} 

При запуске приложения, регистратор никогда не устанавливается или просто равна нулю.

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

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

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

+0

Создаете ли вы объект самостоятельно или вызываете один из методов CompositionContainer.GetExport? –

+0

@PanosRontogiannis На самом деле я создал его сам. –

ответ

1

Чтобы составить или удовлетворить импорт объекта, вам необходимо использовать CompositionContainer.

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

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

+0

Спасибо за ответ. К сожалению, он все еще не работает. Кажется, MEF просто не может разрешить импорт. –

+0

@ IsilmëOrphousV Вы используете тот же CompositionContainer, который используется для создания корневой модели? –

+0

Да. Я делаю это в AppBootstrapper, так что это определенно тот же контейнер. –