Silverlight 4,MEF,导出/导入错误,Mefx不想工作

时间:2010-12-14 16:43:22

标签: mvvm silverlight-4.0 mef

出于沮丧和超过3天的时间来搜索这个问题......我别无选择,只能用我的问题打扰你们。

我正在创建一个Silverlight应用程序。我正在使用MEF。当我尝试运行我的应用程序时,我收到以下错误。

  

构造函数的调用   类型   'IFG.Silverlight.Client.Views.MenuView'   与指定的绑定匹配   约束引发了异常。 [线:   25位置:47]

及其内部例外情况如下......

  

构图保持不变。该   变更被拒绝了因为   以下错误:组成   产生了单一的构图错误。   根本原因如下。   查看CompositionException.Errors   财产更详细   信息。

     

1)没有找到有效的出口   匹配约束   '((exportDefinition.ContractName ==   “MenuViewModel”)AndAlso   (exportDefinition.Metadata.ContainsKey( “ExportTypeIdentity”)   并且   “IFG.Silverlight.Client.ViewModel.MenuViewModel” .Equals(exportDefinition.Metadata.get_Item( “ExportTypeIdentity”))))”,   可能是无效的出口   拒绝。

     

导致:无法设置导入   “IFG.Silverlight.Client.Views.MenuView.ViewModel   (ContractName =“MenuViewModel”)'on   部分   'IFG.Silverlight.Client.Views.MenuView'。   元件:   IFG.Silverlight.Client.Views.MenuView.ViewModel   (ContractName =“MenuViewModel”) - >   IFG.Silverlight.Client.Views.MenuView

确定。我的代码非常简单,因为它是一个测试应用程序。

我有一个接口IRetailModel

namespace IFG.Silverlight.Client.Common
{
    public interface IRetailModel
    { ............

然后我有一个实现此接口的类

namespace IFG.Silverlight.Client.Model
{
    [Export(typeof(IRetailModel))]
    public class RetailModel : IRetailModel
    { .................

然后我将ViewModel用于View

namespace IFG.Silverlight.Client.ViewModel
{
    [PartCreationPolicy(CreationPolicy.NonShared)]
    [Export(ViewModelTypes.MenuViewModel)]
    public class MenuViewModel : IFGViewModelBase
    {
 IRetailModel _model;

        [ImportingConstructor]
        public MenuViewModel(IRetailModel model)
        {

好吧,我发现有一个名为MefX的神奇工具,它应该深入调试你的代码并告诉你发生了什么......我还没有能够让它工作。

我按照本文http://blogs.msdn.com/b/nblumhardt/archive/2009/09/24/debug-composition-from-within-visual-studio.aspx

的说明进行操作

当我尝试运行时说

  

错误:无法加载一个或多个   请求的类型。检索   LoaderExceptions属性更多   信息。

然后回到谷歌,我发现这个Visual MefX(这是相同的但有GUI),我可以加载.xap但基本上它给了我与Visual Studio相同的信息。我找不到这个傻瓜[BECAUSE] ......

对于这种情况,我非常,非常和非常沮丧。任何人都可以向我解释我在哪里没有让MefX完成它的工作?我知道MEF似乎是处理这些隔夜框架(缺乏文件,车辆等等)的风险,但是Prism对我来说不是一个选择(当我可以使用我的时候,我想购买M16来杀死苍蝇)手指)。

谢谢

1 个答案:

答案 0 :(得分:2)

为了将来参考,此博客文章附带了Visual Mefx的更新版本:How to Debug and Diagnose MEF Failures。它也是MEFContrib的一部分,虽然我不确定MEFContrib版本是否具有博客文章中版本的所有更改。