MvvmCross 6.4.1 Mvx.IoCProvider.Resolve<IMvxAppStart>() 失败,找不到构造函数

Posted

技术标签:

【中文标题】MvvmCross 6.4.1 Mvx.IoCProvider.Resolve<IMvxAppStart>() 失败,找不到构造函数【英文标题】:MvvmCross 6.4.1 Mvx.IoCProvider.Resolve<IMvxAppStart>() have failed, do not find the constructor 【发布时间】:2020-04-19 10:40:47 【问题描述】:

将 MvvmCross 更新到 6.4.1 后,要启动项目 Xamarin.ios,不推荐使用 Mvx.Resolve,然后现在我使用:Mvx.IoCProvider.Resolve(),但出现以下错误:

堆栈跟踪:

无法解析类型 MvvmCross.ViewModels.IMvxAppStart Stacktrace: 在 MvvmCross.IoC.MvxIoCContainer.Resolve (System.Type t) [0x0001c] 在 D:\a\1\s\MvvmCross\IoC\MvxIoCContainer.cs:252 在 MvvmCross.IoC.MvxIoCContainer.Resolve[T] () [ 0x00000] 在 D:\a\1\s\MvvmCross\IoC\MvxIoCContainer.cs:242 在 MvvmCross.IoC.MvxIoCProvider.Resolve[T] () [0x00000] 在 D:\a\1\s\MvvmCross\IoC \MvxIoCProvider.cs:66 at Fidelity.FCS.iOS.AppDelegate.FinishedLaunching (UIKit.UIApplication application, Foundation.NSDictionary launchOptions) [0x0015d] in ProjectName/AppDelegate.cs:98 at (wrapper managed-to-native) UIKit.UIApplication .UIApplicationMain(int,string[],intptr,intptr) 在 /Library/Frameworks/Xamarin.iOS 中的 UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) [0x00005]。在 /库/Frameworks/Xamarin.iOS.framework/Versions/13.6.0.12/src/ Xamarin.iOS/UIKit/UIApplication.cs:65 at Fidelity.FCS.iOS.Application.Main (System.String[] args) [0x00001] in ProjectName/Main.cs:13

在 AppDelegate 中的代码部分下方,发生错误:

UIApplication.SharedApplication.SetStatusBarStyle(UIStatusBarStyle.LightContent, true);

Window = new UIWindow(UIScreen.MainScreen.Bounds);

var presenter = new CustomMvxIosViewPresenter(this, Window);

var setup = new Setup(this, presenter); 
setup.PlatformInitialize();

//here , in this call, happens the error 
var startup = Mvx.IoCProvider.Resolve<ImvxAppStart>();
startup.Start();

Window.MakeKeyAndVisible();

我正在使用 Visual Studio for Mac 我的 Visual Studio For Mac 配置:

Visual Studio Community 2019 for Mac 版本 8.3.11(内部版本 1)安装 UUID:0672de6a-2768-4316-8e45-910515627427 GTK+ 2.24.23(Raleigh 主题)Xamarin.Mac 5.16.1.24 (d16-3 / 08809f5b)

包版本:604000208

Mono 框架 MDK 运行时:Mono 6.4.0.208 (2019-06/07c23f2ca43)(64 位)软件包版本:604000208

Xamarin Designer 版本:16.3.0.256 哈希:8a223bfd7 分支:remotes/origin/d16-3 构建日期:2019-11-01 21:02:02 UTC

NuGet 版本:5.3.0.6192

.NET Core SDK SDK:未安装 MSBuild SDK:/Users/iterative/5.18.1/lib/mono/msbuild/15.0/bin/Sdks

.NET Core Runtime 运行时:未安装

Xamarin.Profiler 版本:1.6.12.29 位置:/Applications/Xamarin Profiler.app/Contents/MacOS/Xamarin Profiler

更新版本:11

Apple 开发者工具 Xcode 11.2.1 (15526.1) Build 11B53

Xamarin.Mac 版本:6.6.0.12(Visual Studio 社区)哈希:e3c2b406d 分支:xcode11.2 构建日期:2019-11-01 00:12:07-0400

Xamarin.iOS 版本:13.6.0.12(Visual Studio 社区)哈希:e3c2b406d 分支:xcode11.2 构建日期:2019-11-01 00:12:08-0400

Xamarin.android 版本:10.0.6.2(Visual Studio 社区)提交:xamarin-android/d16-3/c407838 Android SDK:/Users/iterative/Library/Developer/Xamarin/android-sdk-macosx 支持的 Android 版本: 7.1(API 级别 25)8.0(API 级别 26)8.1(API 级别 27)

SDK 工具版本:26.1.1 SDK 平台工具版本:29.0.5 SDK 构建工具版本:29.0.2

构建信息:Mono:mono/mono/2019-06@476d72b9e32 Java.Interop:xamarin/java.interop/d16-3@5836f58 LibZipSharp:grendello/LibZipSharp/d16-3@71f4a94 LibZip:nih-at/libzip /rel-1-5-1@b95cf3fd ProGuard:xamarin/proguard/master@905836d SQLite:xamarin/sqlite/3.27.1@8212a2d Xamarin.Android 工具:xamarin/xamarin-android-tools/d16-3@cb41333 Microsoft Mobile OpenJDK Java SDK:/Users/iterative/Library/Developer/Xamarin/jdk/microsoft_dist_openjdk_1.8.0.25 1.8.0-25 此处提供 Android Designer EPL 代码:https://github.com/xamarin/AndroidDesigner.EPL Android SDK Manager 版本:1.4.0.65 哈希:c33b107 分支:remote/origin/d16-3 构建日期:2019-11-19 20:33:22 UTC Android 设备管理器版本:1.2.0.116 哈希:d2b2af0 分支:remote/origin/d16-3 构建日期:2019-11-19 20:33:42 UTC Xamarin Inspector 版本:1.4.3 哈希:db27525 分支:1.4-release 构建日期:星期一,2018 年 7 月 9 日 21:20:18 GMT 客户端兼容性:1

构建信息发布 ID:803110001 Git 修订:6ee6ad2ec46ae5a08a1999ee4c815ac656a35b91 构建日期:2019-12-05 16:09:27+00 构建分支:release-8.3 Xamarin 扩展:56bd70ef2e327f71c615cfc29a47fd50685fadcb

操作系统 Mac OS X 10.14.6 Darwin 18.7.0 Darwin Kernel Version 18.7.0 Tue Aug 20 16:57:14 PDT 2019 root:xnu-4903.271.2~2/RELEASE_X86_64 x86_64

【问题讨论】:

能分享一下ImvxAppStart.cs和MvxIoCContainer.cs的代码吗? 你有被 MvxAppStart 类继承的类吗? 【参考方案1】:

我只需要弄清楚这一点,因为没有答案 - 我通过添加以下行解决了这个问题 -

MvxIosSetupSingleton.EnsureSingletonAvailable(this,presenter).EnsureInitialized();

所以我的应用委托使用

public override bool FinishedLaunching(UIApplication app, NSDictionary options)

            _window = new UIWindow(UIScreen.MainScreen.Bounds);
            var presenter = IsPad? (IMvxIosViewPresenter)new 
            SplitViewPresenter(this,_window) : new SingleViewPresenter(this, _window);

            var setup = new Setup();
            setup.PlatformInitialize(this , presenter);

                MvxIosSetupSingleton.EnsureSingletonAvailable(this,presenter).EnsureInitialized();

            var startup = Mvx.IoCProvider.Resolve<IMvxAppStart>();
            startup.Start();
            _window.MakeKeyAndVisible();

            return true;
        

【讨论】:

以上是关于MvvmCross 6.4.1 Mvx.IoCProvider.Resolve<IMvxAppStart>() 失败,找不到构造函数的主要内容,如果未能解决你的问题,请参考以下文章

MvvmCross 6 中的子类 UIWindow

“Raw”Xamarin和MvvmCross

mvvmcross 应用程序单例生命周期

是否有mvvmcross提供的标签式布局平台?

MvvmCross.Forms 5.4:如何设置 UWP 项目?

MvvmCross、Xamarin Studio 和 ICommands