繁体   English   中英

Mvvmcross:文件插件错误

[英]Mvvmcross: File Plugin error

使用mvvmCross文件插件时,我收到以下错误。 我尝试使用N-14代码示例,它使用“File Plugin 3.1.1-beta”,我得到错误,我也使用了一个全新的项目,从nuGet下载最新的插件版本,我也得到了同样的错误。

这似乎与这个家伙有同样的问题:

https://github.com/MvvmCross/MvvmCross/issues/510

这似乎是错误消息中的主线:

Failed to resolve parameter for parameter fileStore of type IMvxFileStor
at Cirrious.CrossCore.IoC.MvxSimpleIoCContainer.GetIoCParameterValues (System.Type type, System.Reflection.ConstructorInfo firstConstructor) [0x00000] in <filename unknown>:0 

我已经尝试重新启动xamarin工作室和我的MacPro等。我使用了位置和信使插件没有任何问题

请指教

跟踪:

2014-03-17 20:37:44.836 MCOTaxiIOS [2730:60b] TouchNavigation:Diagnostic:0.56 Navigate requested [0:] TouchNavigation:Diagnostic:0.56在'/Developer/Projects/MCO/MCO.IOS/导航请求已解决的待处理断点Views / FirstView.cs:58,1'到MonoTouch.UIKit.UIViewController MCO.IOS.Views.FirstView.CreateTabFor(string title,string imageName,Cirrious.MvvmCross.ViewModels.IMvxViewModel viewModel)[0x0002f]。 [0:] 2014-03-17 20:37:44.875 MCOIOS [2730:60b] mvx:诊断:0.59请求为空 - 假设这是一个TabBar类型的情况,其中在构造期间调用ViewDidLoad ...现在修补请求 - 但请注意构造期间虚拟调用的问题[0:] mvx:诊断:0.59请求为空 - 假设这是一个TabBar类型的情况,其中在构造期间调用ViewDidLoad ...现在修补请求 - 但要注意问题构造期间的虚拟调用在'/Developer/Projects/MCO/MCO.Common/Services/LocationService.cs:110,1'中解决了挂起的断点,以使MCO.Common.LocationService.OnError无效(Cirrious.MvvmCross.Plugins.Location.MvxLocationError错误) )[0x00001]。 [0:] 2014-03-17 20:37:44.917 MCOIOS [2730:60b] mvx:警告:0.64创建类型为FirstViewModel的viewModel时遇到问题 - 问题MvxIoCResolveException:创建MCO.Common时,无法解析IMvxFileStore类型的参数fileStore的参数.ViewModels.FirstViewModel在Cirrious.CrossCore.IoC.MvxSimpleIoCContainer.GetIoCParameterValues(System.Type type,System.Reflection.ConstructorInfo firstConstructor)[0x00000] in:0 at Cirrious.CrossCore.IoC.MvxSimpleIoCContainer.IoCConstruct(System.Type type)[ 0x00000]在:0在Cirrious.CrossCore.Mvx.IocConstruct(System.Type的吨)[0x00000]中:0在Cirrious.MvvmCross.ViewModels.MvxDefaultViewModelLocator.TryLoad(System.Type的viewModelType,IMvxBundle的parameterValues,IMvxBundle savedState,IMvxViewModel&视图模型) [0x00000] in:0 [0:] mvx:警告:0.64创建类型为FirstViewModel的viewModel时出现问题 - 问题MvxIoCResolveException:创建MCO.Common.ViewMode时,无法解析类型为IMvxFileStore的参数fileStore的参数 ls.FirstViewModel在Cirrious.CrossCore.IoC.MvxSimpleIoCContainer.GetIoCParameterValues(System.Type type,System.Reflection.ConstructorInfo firstConstructor)[0x00000] in:0 at Cirrious.CrossCore.IoC.MvxSimpleIoCContainer.IoCConstruct(System.Type type)[0x00000 ] in:0在Cirrious.CrossCore.Mvx.IocConstruct(System.Type t)[0x00000] in:0 at Cirrious.MvvmCross.ViewModels.MvxDefaultViewModelLocator.TryLoad(System.Type viewModelType,IMvxBundle parameterValues,IMvxBundle savedState,IMvxViewModel&viewModel)[ 0x00000] in:0

堆栈跟踪:

System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---> System.Exception:无法从定位器MvxDefaultViewModelLocator为类型CollectABull.Core.ViewModels.FirstViewModel构造和初始化ViewModel - 有关更多信息,请查看MvxTrace在Cirrious.MvvmCross.ViewModels.MvxViewModelLoader.LoadViewModel(Cirrious.MvvmCross.ViewModels.MvxViewModelRequest)请求,IMvxBundle savedState,IMvxViewModelLocator viewModelLocator)[0x00000] in:0 at Cirrious.MvvmCross.ViewModels.MvxViewModelLoader.LoadViewModel(Cirrious.MvvmCross.ViewModels.MvxViewModelRequest request,IMvxBundle savedState)[0x00000] in:0 at Cirrious.MvvmCross.Touch。 Views.MvxViewControllerExtensionMethods.LoadViewModel(IMvxTouchView TouchView中)[0x00000]中:0在Cirrious.MvvmCross.Touch.Views.MvxViewControllerExtensionMethods + <> C_ DisplayClass1.b _0()[0x00000]中:0在Cirrious.MvvmCross.Views.MvxViewExtensionMethods.OnViewCreate (IMvxView视图,System.Func`1 viewModelLoader)[0x00000] in:0 at Cirrious.MvvmCross.Touch.Views.MvxViewControllerExtensionMethods.O nViewCreate(IMvxTouchView touchView)[0x00000] in:0 at Cirrious.MvvmCross.Touch.Views.MvxViewControllerAdapter.HandleViewDidLoadCalled(System.Object sender,System.EventArgs e)[0x00000] in:0 at at(wrapper delegate-invoke):invoke_void_ __object_EventArgs(对象,System.EventArgs)在Cirrious.CrossCore.Core.MvxDelegateExtensionMethods.Raise(System.EventHandler事件处理程序,System.Object的发送者)[0x00000]中:0在Cirrious.CrossCore.Touch.Views.MvxEventSourceTabBarController.ViewDidLoad() [0x00000] in:0处的MCO.IOS.Views.FirstView.ViewDidLoad()[0x00002]位于/Developer/Projects/MCO/MCO.IOS/Views/FirstView.cs:26,位于MCO.IOS.Views.FirstView .. ctor()[0x0000f]位于/Developer/Projects/MCO/MCO.IOS/Views/FirstView.cs:18 at(包装器托管到本机)System.Reflection.MonoCMethod:InternalInvoke(System.Reflection.MonoCMethod,object / Developer / M中的System.Reflection.MonoCMethod.InternalInvoke(System.Object obj,System.Object [] parameters)[0x00002]中的,object [],System.Exception&) onoTouch /源/单声道/ MCS /类/ corlib /的System.Reflection / MonoMethod.cs:537

MvvmCross插件通常分为两部分。 核心PCL项目中有接口。 然后是平台特定的实现:Android,iOS等。

如果您查看NuGet包,您将看到各种平台目标。 NuGet将根据您的项目类型引用正确的程序集。

MvvmCross使用IoC在运行时注入依赖项。 您的ViewModel将引用IFileStore ,MvvmCross将在构造ViewModel时尝试解析该依赖关系。

但是,如果已注册接口的特定实现,MvvmCross只能解析它。 通常,您可以在App.Initialize使用代码来注册以“Service”结尾的所有类型。 您还可以显式注册类型。

由于插件具有通用模式,因此MvvmCross支持在启动时自动注册插件。 它的方式是通过NuGet添加到平台特定项目的Bootstrap文件。 这通常看起来像:

public class FilePluginBootstrap
    : MvxPluginBootstrapAction<Cirrious.MvvmCross.Plugins.File.PluginLoader>
{
}

在启动时,MvvmCross会查找实现IMvxBootstrapAction所有类型。 每个插件还有一个PluginLoader类,用于在MvvmCross中注册该类型。 像这样的东西:

public class Plugin
    : IMvxPlugin          
{
    public void Load()
    {
        Mvx.RegisterType<IMvxFileStore, MvxTouchFileStore>();
    }
}

正如您所看到的,通过在Core PCL项目以及特定于平台的项目中安装插件包,MvvmCross具有所有部件,可以自动在IoC容器中注册实现。

TL; DR:确保在Core PCL和平台特定项目中安装插件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM