MvvmCross无法解析类型

时间:2018-11-07 21:09:28

标签: ios xamarin mvvmcross

我在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时没有错误,并且CreatableTypes()集合中列出了MediaManagerService。但是,在初始化变量z时,即在执行Resolve方法时,代码会炸毁。

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

检查您是否有多个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之后对一次出现执行上述解决方案,以便其覆盖先前的注册,或者您可以简单地更改接口名称/ implementation,以便扫描为您提供一对唯一的要注册的Interface / Implementation。