Catel.IoC.TypeNotRegisteredException:Catel 抛出异常,即使 CanResolve returns 为真

Catel.IoC.TypeNotRegisteredException: Catel throws exception even though CanResolve returns true

我有一个安装了 Catel.Core、Catel.MVVM、Catel.Analyzers 和 Catel.Fody 的 WPF 应用程序。

当我启动应用程序并尝试解析数据访问存储库 (ILigaMannschaftenZuordnungenRepository) 时,抛出异常 Catel.IoC.TypeNotRegisteredException。当我调用 dependencyResolver.CanResolve<ILigaMannschaftenZuordnungenRepository>(); 时,它 returns 为真。

我做了一个扩展方法来在一个地方注册每个服务和存储库。

public static IServiceLocator RegisterDataAccessRepositories(this IServiceLocator services, string dbCon)
{
                services.RegisterInstance(new SpielbetriebDbContext(dbCon));
                services.RegisterType<IDuelleRepository, DuelleRepository>();
                services.RegisterType<IDuellErgebnisseRepository, DuellErgebnisseRepository>();
                services.RegisterType<ILigaMannschaftenZuordnungenRepository, LigaMannschaftenZuordnungenRepository>(); // It is registered!
                services.RegisterType<IMitgliederRepository, MitgliederRepository>();
                services.RegisterType<IPartieDetailsRepository, PartieDetailsRepository>();
                services.RegisterType<IPartienRepository, PartienRepository>();
                services.RegisterType<IProtokollierungenRepository, ProtokollierungenRepository>();
                services.RegisterType<ISaetzeRepository, SaetzeRepository>();
                services
                    .RegisterType<ISpielerPartieErgebnisZuordnungenRepository,
                        SpielerPartieErgebnisZuordnungenRepository>();
                services.RegisterType<ISpielerRepository, SpielerRepository>();
                services.RegisterType<IVereineRepository, VereineRepository>();
    
                return services;
}

当我调试应用程序并检查 ServiceLocator 的注册类型时,它甚至显示 ILigaMannschaftenZuordnungenRepository 已注册(字段 _registeredTypes):

在 OnStartup 中调用扩展。我什至在 App class.

的构造函数中尝试过
var serviceLocator = this.GetServiceLocator();
serviceLocator.RegisterDataAccessRepositories(DataConfig.CurrentDbCon); // <--
serviceLocator.RegisterApplicationServices();

我试图用 Resolve 方法立即调用它

var dep = this.GetDependencyResolver();
dep.Resolve<ILigaMannschaftenZuordnungenRepository>();
dep.CanResolve<ILigaMannschaftenZuordnungenRepository>(); // returns true

我做错了什么?

异常消息

好的,在调试了一段时间并检查了多项内容之后,我再次查看了我的数据访问存储库。我意识到我的存储库的实现有一个 internal 构造函数而不是 public 构造函数。原因是基础存储库,它有一个内部构造函数。从 internal 更改为 public 后,DI 容器正确解析了类型。

如果您 运行 遇到这个问题,请检查您的类型是否有 public 构造函数。

差:

internal LigaMannschaftenZuordnungenRepository(SpielbetriebDbContext context) : base(context)
{
}

好:

public LigaMannschaftenZuordnungenRepository(SpielbetriebDbContext context) : base(context)
{
}