2013-04-05 3 views
0

Обновление:MEF не предоставляющий объект

Это проект плагина mvc с использованием MEF для получения контроллеров и действий во время выполнения. http://www.fidelitydesign.net/?p=104

Я добавил новый проект, и в своем классе я добавил экспорт типа, который уже составлен.

[Export(typeof(IController)), ExportMetadata("Name", "Clocks")] 
    public class ClocksController : Controller 
    { 

    public XmlActionResult Index() 
    { 
    var p = DeviceLogic.GetUnassigned; 
    } 
    [Import(typeof(DeviceLogic))] 
    DeviceLogic DeviceLogic { get; set; } 
    } 

Это получает состоит в другом проекте:

[Export] 
    public class ImportControllerFactory : DefaultControllerFactory 
    { 
    [ImportMany] 
    private IEnumerable<PartFactory<IController, IControllerMetadata>> ControllerFactories; 
    } 

Application Start

[ImportMany] 
private IEnumerable<ImportControllerFactory> ControllerFactories; 

фабрики Контроллер имеет нулевое значение, пока я на самом деле не составляют части

container.ComposeParts(this); 

то будет работать отлично , поэтому я решил попробовать и подражать этому, чтобы получить devicelogic, чтобы появиться в проекте, у которого возникли проблемы.

Я создал интерфейс emptry (IEmpty) для тестирования и попытался это:

[Export(typeof(IEmpty))] 
    public class RequestProcessor : IEmpty 
    { 

    [Import(typeof(DeviceLogic))] 
    DeviceLogic DeviceLogic { get; set; } 
    } 

и в моем начале applciation добавил

[ImportMany] 
private IEnumerable<IEmpty> TestMef; 

Это наполненный один экземпляр после композиции, так что похоже, сработало. Мой вопрос в том, есть ли у кого-нибудь какие-либо предложения относительно того, почему devicelogic имеет значение null в requestprocessor, но не в clocksController.

+0

Не может добавлять детали, где вы создаете каталог (ы) и контейнер, а также код для композиции DataTransfer? Также есть типы в одной сборке? –

ответ

1

Вы должны вызвать метод SatisfyImportsOnce MEF после Вашего экземпляра:

YourMEFContainter.SatisfyImportsOnce(dataTransfer) 
+0

Извините, я забыл упомянуть, что я это делаю. Я вижу контейнер, и у него есть весь экспорт, который я ожидал бы. thansk за ответ – DavidB

+1

Итак, у вас также есть каталог? Могу ли я узнать, где ваш вызов 'SatisfyImports'? –

+0

Извините, Лука, я неправильно понял. У меня есть catlogue, и контейнер и другие нагрузки MEF работают отлично. Я не использую SatisfyImports - это вещь 4,5? – DavidB

Смежные вопросы