MvvmCross 解析类型失败

MvvmCross Failed to Resolve Type

我在 iOS 项目中使用 MvvmCross v6.2.1,但出现以下异常: MvvmCross.Exceptions.MvxIoCResolveException 已被抛出。未能解析类型 Countr.Core.Services.IMediaManagerService。 为了解决这个问题,我向 App.cs

添加了一些调试代码
using MvvmCross.IoC;
using Countr.Core.ViewModels;
using Countr.Core.Services;
using MvvmCross;
using MvvmCross.ViewModels;
using System.Linq;

namespace Countr.Core
{
    public class App : MvxApplication
    {
        public override void Initialize()
        {
            CreatableTypes()
                .EndingWith("Service")
                .AsInterfaces()
                .RegisterAsLazySingleton();

            CreatableTypes()
                .EndingWith("Repository")
                .AsInterfaces()
                .RegisterAsLazySingleton();

         var x = new MediaManagerService();
         var y = this.CreatableTypes().FirstOrDefault(t => t.Name == "MediaManagerService");
         var z = Mvx.IoCProvider.Resolve<IMediaManagerService>();

            RegisterAppStart<ArticlesViewModel>();
        }
    }
}

变量x和y创建成功,即创建MediaManagerService没有错误,MediaManagerService在CreatableTypes()集合中列出。然而,代码在初始化变量 z 时崩溃,即在执行 Resolve 方法时。

我做错了什么?

检查您是否有多个 MediaManagerService 因为它可能正在尝试构建另一个实例。

而不是

var y = this.CreatableTypes().FirstOrDefault(t => t.Name == "MediaManagerService");

检查

var ylist = this.CreatableTypes().Where(t => t.Name == "MediaManagerService").ToList();

如果您仍然只有一次 MediaManagerService 尝试注册

Mvx.IoCProvider.LazyConstructAndRegisterSingleton<IMediaManagerService, MediaManagerService>();

如果你有不止一次的实施,那么你可以在注册 CreatableTypes 之后对一次实施执行上述解决方案,这样它就会覆盖以前的注册,或者你可以简单地更改名称interface/implementation 以便扫描为您提供一对独特的 Interface/Implementation 进行注册。