MEF不提供对象

时间:2013-04-05 08:56:56

标签: c# 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;
  }

申请开始

[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而在clocksController中没有。

1 个答案:

答案 0 :(得分:1)

您需要在实例化后调用MEF的SatisfyImportsOnce方法:

YourMEFContainter.SatisfyImportsOnce(dataTransfer)