更新:
这是一个 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 中没有任何建议。