【RegisterNavigationServiceAppStart期间的MvxIoCResolveException】金鞍玉勒寻芳客,未信我庐别有春。这篇文章主要讲述RegisterNavigationServiceAppStart期间的MvxIoCResolveException相关的知识,希望能为你提供帮助。
在调用RegisterNavigationServiceAppStart期间,我得到异常:MvvmCross.Platform.Exceptions.MvxIoCResolveException:找不到类型MvvmCross.Core.ViewModels.MvxNavigationServiceAppStart的构造函数失败在调试期间一切正常。但是当我构建版本并准备一个apk时,我得到了这个例外。下面我从设备监视器粘贴日志:
03-01 14:10:49.667:E / mono(21855):未处理异常:03-01 14:10:49.667:E / mono(21855):MvvmCross.Platform.Exceptions.MvxIoCResolveException:找不到类型MvvmCross的构造函数.Core.ViewModels.MvxNavigationServiceAppStart`1 [[AppMMobile.DataService.ViewModels.MainViewModel,AppMMobile.DataService,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]] 03-01 14:10:49.667:E / mono( 21855):在MvvmCross.Platform.IoC.MvxSimpleIoCContainer.IoCConstruct(System.Type type)[0x0002b] in:0 03-01 14:10:49.667:E / mono(21855):at MvvmCross.Platform.Mvx.IocConstruct [ T]()[0x00006] in:0 03-01 14:10:49.667:E / mono(21855):在MvvmCross.Platform.Mvx.ConstructAndRegisterSingleton [TInterface,TType]()[0x00006] in:0 03-01 14:10:49.667:E / mono(21855):在MvvmCross.Core.ViewModels.MvxApplication.RegisterNavigationServiceAppStart [TViewModel]()[0x00000] in < 593dd944ead4429db9881ce186989310> :0 03-01 14:10:49.667:E / mono( 21855):在MappMMobile.DataService.App.Initialize()[0x0001a]中:0 03 -01 14:10:49.667:E / mono(21855):在< 593dd944ead4429db9881ce186989310中的MvvmCross.Core.Platform.MvxSetup.InitializeApp(MvvmCross.Platform.Plugins.IMvxPluginManager pluginManager,MvvmCross.Core.ViewModels.IMvxApplication app)[0x00007] > :0 03-01 14:10:49.667:E / mono(21855):在< 593dd944ead4429db9881ce186989310> 中的MvvmCross.Core.Platform.MvxSetup.InitializeSecondary()[0x000b4]:0 03-01 14:10:49.667:E / mono(21855):在MvvmCross.Droid.Platform.MvxandroidSetupSingleton.b__7_0(System.Object被忽略)[0x00000] in < 9d2864708eca4fb99992263d063bbc38> :0 03-01 14:10:49.667:E / mono(21855):at System。 Threading.QueueUserWorkItemCallback.WaitCallback_Context(System.Object state)[0x00007] in:0 03-01 14:10:49.667:E / mono(21855):at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext,System .Threading.ContextCallback回调,System.Object状态,System.Boolean preserveSyncCtx)[0x00071] in:0 03-01 14:10:49.667:E / mono(21855):at System.Threading.Ex ecutionContext.Run(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback callback,System.Object state,System.Boolean preserveSyncCtx)[0x00000] in:0 03-01 14:10:49.667:E / mono(21855):在System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()[0x00021] in:0 03-01 14:10:49.667:E / mono(21855):at System.Threading.ThreadPoolWorkQueue.Dispatch()[0x00074 ] in:0 03-01 14:10:49.667:E / mono(21855):在System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()[0x00000] in:0
public class App : MvvmCross.Core.ViewModels.MvxApplication
{
public override void Initialize()
{
CreatableTypes()
.EndingWith("Service")
.AsInterfaces()
.RegisterAsLazySingleton();
RegisterNavigationServiceAppStart<
ViewModels.MainViewModel>
();
[Registering my types...]
}
}
你能告诉我我做错了什么吗?
答案确保你的android项目中有一个文件
LinkerPleaseInclude.cs
与this content:using System;
using System.Collections.Specialized;
using System.Windows.Input;
using Android.App;
using Android.Views;
using Android.Widget;
using MvvmCross.Binding.BindingContext;
using MvvmCross.Core.Navigation;
using MvvmCross.Core.ViewModels;
namespace MyNamespace
{
// This class is never actually executed, but when Xamarin linking is enabled it does how to ensure types and properties
// are preserved in the deployed app
public class LinkerPleaseInclude
{
public void Include(Button button)
{
button.Click += (s,e) =>
button.Text = button.Text + "";
}public void Include(CheckBox checkBox)
{
checkBox.CheckedChange += (sender, args) =>
checkBox.Checked = !checkBox.Checked;
}public void Include(Switch @switch)
{
@switch.CheckedChange += (sender, args) =>
@switch.Checked = !@switch.Checked;
}public void Include(View view)
{
view.Click += (s, e) =>
view.ContentDescription = view.ContentDescription + "";
}public void Include(TextView text)
{
text.AfterTextChanged += (sender, args) =>
text.Text = "" + text.Text;
text.Hint = "" + text.Hint;
}public void Include(CheckedTextView text)
{
text.AfterTextChanged += (sender, args) =>
text.Text = "" + text.Text;
text.Hint = "" + text.Hint;
}public void Include(CompoundButton cb)
{
cb.CheckedChange += (sender, args) =>
cb.Checked = !cb.Checked;
}public void Include(SeekBar sb)
{
sb.ProgressChanged += (sender, args) =>
sb.Progress = sb.Progress + 1;
}public void Include(RadioGroup radioGroup)
{
radioGroup.CheckedChange += (sender, args) =>
radioGroup.Check(args.CheckedId);
}public void Include(RadioButton radioButton)
{
radioButton.CheckedChange += (sender, args) =>
radioButton.Checked = args.IsChecked;
}public void Include(RatingBar ratingBar)
{
ratingBar.RatingBarChange += (sender, args) =>
ratingBar.Rating = 0 + ratingBar.Rating;
}public void Include(Activity act)
{
act.Title = act.Title + "";
}public void Include(INotifyCollectionChanged changed)
{
changed.CollectionChanged += (s,e) =>
{ var test = $"{e.Action}{e.NewItems}{e.NewStartingIndex}{e.OldItems}{e.OldStartingIndex}";
};
}
public void Include(ICommand command)
{
command.CanExecuteChanged += (s, e) =>
{ if (command.CanExecute(null)) command.Execute(null);
};
}public void Include(MvvmCross.Platform.IoC.MvxPropertyInjector injector)
{
injector = new MvvmCross.Platform.IoC.MvxPropertyInjector ();
}
public void Include(System.ComponentModel.INotifyPropertyChanged changed)
{
changed.PropertyChanged += (sender, e) =>
{
var test = e.PropertyName;
};
}public void Include(MvxTaskBasedBindingContext context)
{
context.Dispose();
var context2 = new MvxTaskBasedBindingContext();
context2.Dispose();
}
public void Include(MvxNavigationService service, IMvxViewModelLoader loader)
{
service = new MvxNavigationService(null, loader);
}
public void Include(ConsoleColor color)
{
Console.Write("");
Console.WriteLine("");
color = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.ForegroundColor = ConsoleColor.Magenta;
Console.ForegroundColor = ConsoleColor.White;
Console.ForegroundColor = ConsoleColor.Gray;
Console.ForegroundColor = ConsoleColor.DarkGray;
}
}
}
它将确保链接器不会剥离MvvmCross工作所需的类,属性等。这就是可能发生的事情
HIH
推荐阅读
- Xamarin Android(此应用程序使用不正确的配置构建)
- Xamarin.Forms Android改变Button Image的颜色
- Android ActionBar错误的布局方向
- Xamarin表单,在Visual Studio Android Emulator上运行的应用程序但在真实设备上崩溃
- 在xamarin.android中的absoluteLayout中定位到右下角
- 为什么在NUnit Android Test Runner中Asserts等于0(零)()
- 在Xamarin Android项目中的android Assets中添加文件夹会引发Build Error
- 无法在Android上使用C ++ OpenCV打开相机
- Xamarin Android - 如何在textview动画期间阻止文本移动