使用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: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] 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 [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] in:0 at Cirrious.MvvmCross.Touch.Views.MvxViewControllerExtensionMethods + <> c_ DisplayClass1.b _0()[0x00000] in:0 at 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 eventHandler,System.Object sender)[0x00000] in:0 at 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
Kiliman.. 9
MvvmCross插件通常分为两部分.核心PCL项目中有接口.然后是平台特定的实现:Android,iOS等.
如果您查看NuGet包,您将看到各种平台目标.NuGet将根据您的项目类型引用正确的程序集.
MvvmCross使用IoC在运行时注入依赖项.您的ViewModel将引用IFileStore
,MvvmCross将在构造ViewModel时尝试解析该依赖关系.
但是,如果已注册接口的特定实现,MvvmCross只能解析它.通常,您可以使用代码App.Initialize
注册以"Service"结尾的所有类型.您还可以显式注册类型.
由于插件具有通用模式,因此MvvmCross支持在启动时自动注册插件.它的方式是通过Bootstrap
NuGet添加到平台特定项目的文件.这通常看起来像:
public class FilePluginBootstrap : MvxPluginBootstrapAction{ }
在启动时,MvvmCross会查找所有实现的类型IMvxBootstrapAction
.每个插件还有一个PluginLoader
在MvvmCross中注册类型的类.像这样的东西:
public class Plugin : IMvxPlugin { public void Load() { Mvx.RegisterType(); } }
正如您所看到的,通过在Core PCL项目以及特定于平台的项目中安装插件包,MvvmCross具有所有部件,可以自动在IoC容器中注册实现.
TL; DR:确保在Core PCL和平台特定项目中安装插件.
MvvmCross插件通常分为两部分.核心PCL项目中有接口.然后是平台特定的实现:Android,iOS等.
如果您查看NuGet包,您将看到各种平台目标.NuGet将根据您的项目类型引用正确的程序集.
MvvmCross使用IoC在运行时注入依赖项.您的ViewModel将引用IFileStore
,MvvmCross将在构造ViewModel时尝试解析该依赖关系.
但是,如果已注册接口的特定实现,MvvmCross只能解析它.通常,您可以使用代码App.Initialize
注册以"Service"结尾的所有类型.您还可以显式注册类型.
由于插件具有通用模式,因此MvvmCross支持在启动时自动注册插件.它的方式是通过Bootstrap
NuGet添加到平台特定项目的文件.这通常看起来像:
public class FilePluginBootstrap : MvxPluginBootstrapAction{ }
在启动时,MvvmCross会查找所有实现的类型IMvxBootstrapAction
.每个插件还有一个PluginLoader
在MvvmCross中注册类型的类.像这样的东西:
public class Plugin : IMvxPlugin { public void Load() { Mvx.RegisterType(); } }
正如您所看到的,通过在Core PCL项目以及特定于平台的项目中安装插件包,MvvmCross具有所有部件,可以自动在IoC容器中注册实现.
TL; DR:确保在Core PCL和平台特定项目中安装插件.