Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Prism中使用MEF检索/导入对象_C#_Dependency Injection_Prism_Mef_Prism 5 - Fatal编程技术网

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

C# 如何在Prism中使用MEF检索/导入对象,c#,dependency-injection,prism,mef,prism-5,C#,Dependency Injection,Prism,Mef,Prism 5,我要求在整个应用程序中有一个对象规则文件,表示要序列化的文件,比如与我的应用程序关联的word*.docs文件 我使用Prism 5和MEF作为依赖注入容器 [Export] [Serializable()] public class RuleFile : NotificationBase, IRuleFile { } 现在我已经用[Export]修饰了这个对象,并试图将它导入到MyViewModel中,但它给出了null 请告诉我我错过了什么?或者告诉我任何其他最佳处理这种情况的方法。您是否

我要求在整个应用程序中有一个对象规则文件,表示要序列化的文件,比如与我的应用程序关联的word*.docs文件

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

[Export]
[Serializable()]
public class RuleFile : NotificationBase, IRuleFile { }
现在我已经用[Export]修饰了这个对象,并试图将它导入到MyViewModel中,但它给出了null


请告诉我我错过了什么?或者告诉我任何其他最佳处理这种情况的方法。

您是否在检查构造函数中的值?直接在属性上修饰的导入将在构造函数之后解析。如果您想访问构造函数中的规则文件,您需要这样设置它

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

    [ImportingConstructor]
    public MyViewModel(RuleFile ruleFile)
    {
        RuleFile = ruleFile;
    }
}
或者,您可以实施iPartimportsAssetFiedNotification,它将为您提供一个通知方法,表示导入已解决。像这样

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

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

你有什么错误吗?是因为你的会员是私人会员吗?注意:请注意,在完全信任的情况下导入或导出私有成员字段、属性和方法在中等/部分信任的情况下可能会出现问题。不会出现错误。正如你所说,即使我把我的私人会员改成了公共财产,但还是没有运气。对不起,我不太了解Prism。您是在配置MEF组合容器和目录,还是应该由Prism负责?我自己也找到了相同的解决方法,但这并没有回答我的问题,因为我在调用构造函数后尝试使用RuleFile对象。所以它不应该返回null。但是,在我得到真正的原因之前,我会将你的答案标记为已接受。在这种情况下,我唯一能想到的是你是否确实在使用MEF来制作MyViewModel?我在上面看不到[Export],但我不知道您是否错过了示例中的[Export]。创建MyViewModel的代码在哪里?
public class MyViewModel : ViewModelBase, IPartImportsSatisfiedNotification
{
    [Import]
    public RuleFile RuleFile { get; set; }

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