更新
这是一个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中没有。
答案 0 :(得分:1)
您需要在实例化后调用MEF的SatisfyImportsOnce
方法:
YourMEFContainter.SatisfyImportsOnce(dataTransfer)