0

更新:

这是一个 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 出现在我遇到问题的项目中。

我创建了一个空接口(IEmpty)进行测试并尝试了这个:

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

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

并在我的应用程序开始添加

[ImportMany]
private IEnumerable<IEmpty> TestMef;

这充满了合成后的一个实例,所以这似乎奏效了。我的问题是,是否有人对为什么 devicelogic 在 requestprocessor 中为 null 而在 clocksController 中没有任何建议。

4

1 回答 1

1

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

YourMEFContainter.SatisfyImportsOnce(dataTransfer)
于 2013-04-05T09:09:07.513 回答