如何在Prism中使用MEF检索/导入对象

时间:2014-07-27 17:57:20

标签: c# dependency-injection prism mef prism-5

我要求在整个应用程序中有一个对象(RuleFile),表示要序列化的文件,例如将与我的应用程序关联的word(* .docs)文件。

我使用Prism 5和MEF作为依赖注入容器。

[Export]
[Serializable()]
public class RuleFile : NotificationBase, IRuleFile { }

现在我使用[Export]修饰了对象并尝试将其导入MyViewModel中的一个,但它正在提供null

public class MyViewModel : ViewModelBase
{
    [Import]
    private RuleFile RuleFile; // 'null' coming here
}

请指导我,我错过了什么?或者告诉我任何其他方法来最好地处理这种情况。

1 个答案:

答案 0 :(得分:0)

你在检查构造函数中的值吗?直接在属性上修饰的导入将在构造函数之后解析。如果你想访问构造函数中的RuleFile,你需要像这样设置它

public class MyViewModel : ViewModelBase
{
    public RuleFile RuleFile { get; set; }

    [ImportingConstructor]
    public MyViewModel(RuleFile ruleFile)
    {
        RuleFile = ruleFile;
    }
}

或者,您可以实施IPartImportsSatisfiedNotification,它会为您提供通知方法,以表明导入已解决。喜欢这个

public class MyViewModel : ViewModelBase, IPartImportsSatisfiedNotification
{
    [Import]
    public RuleFile RuleFile { get; set; }

    public void OnImportsSatisfied()
    {
        // Signifies that Imports have been resolved  
    }
}