PRISM 4 - RegisterViewWithRegion和自定义导出属性

oki*_*ieh 5 prism mef regions

我正在使用Prism 4和MEF Extensions以及MVVM模式.在模块初始化期间,我调用RegisterViewWithRegion(RegionNames.MyRegion,typeof(MyView)),当视图构造如下时,它可以正常工作:

[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class MyView : UserControl
{
    public MyView()
    {
     ....
Run Code Online (Sandbox Code Playgroud)

视图已注册,一切正常.只要我将导出更改为自定义导出属性,就无法再找到视图,尽管它仍在容器中.此自定义导出属性取自Stock Trader RI:

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
[MetadataAttribute]
public class ViewExportAttribute : ExportAttribute, IViewRegionRegistration
{
    public ViewExportAttribute()
        : base(typeof(object))
    { }

    public ViewExportAttribute(string viewName)
        : base(viewName, typeof(object))
    {
        ViewName = viewName;
    }

    public string RegionName { get; set; }
    public string ViewName { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

接口是

public interface IViewRegionRegistration
{
    string RegionName { get; }
    string ViewName { get; }
}
Run Code Online (Sandbox Code Playgroud)

通过将导出属性更改为

[ViewExport(ViewName = "MyView", RegionName = RegionNames.MyRegion)]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class MyView : UserControl
{
    public MyView()
    {
    ....
Run Code Online (Sandbox Code Playgroud)

当调用RegisterViewWithRegion时,它会抛出一个错误:尝试获取MyView类型的实例时出现激活错误,键""

有什么建议?我整天都在看这部分代码而没有找到解决方案.

Dan*_*ted 0

自定义导出属性传递typeof(object)到基本构造函数,这会更改导出的协定,使其不再与导入匹配。更改它以便它调用无参数构造函数。

至于激活错误,您需要更详细地查看异常。根本原因可能就在某个地方,可能埋在 InnerException 下。