我在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方法时,代码会炸毁。
我在做什么错了?
答案 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。