我安装了一个带有Catel.Core、Catel.MVVM、Catel.Analyzers和Catel.Fody的WPF应用程序。
当我启动应用程序并尝试解析数据访问存储库( Data,ILigaMannschaftenZuordnungenRepository)时,会引发异常Catel.IoC.TypeNotRegisteredException。当我调用dependencyResolver.CanResolve<ILigaMannschaftenZuordnungenRepository>();时,它返回true。
我创建了一个扩展方法,在一个地方注册每个服务和存储库。
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类的构造函数。
var serviceLocator = this.GetServiceLocator();
serviceLocator.RegisterDataAccessRepositories(DataConfig.CurrentDbCon); // <--
serviceLocator.RegisterApplicationServices();我试着用解决方法立即调用它。
var dep = this.GetDependencyResolver();
dep.Resolve<ILigaMannschaftenZuordnungenRepository>();
dep.CanResolve<ILigaMannschaftenZuordnungenRepository>(); // returns true我做错什么了?
异常消息

发布于 2022-02-10 19:56:47
好的,在调试了相当一段时间并检查了多个东西之后,我再次查看了我的数据访问存储库。我意识到存储库的实现有一个internal构造函数,而不是一个公共构造函数。原因是base,它有内部构造函数。在从internal转换为public之后,DI容器正确地解析了类型。
如果遇到此问题,请检查类型是否有公共构造函数。
坏:
internal LigaMannschaftenZuordnungenRepository(SpielbetriebDbContext context) : base(context)
{
}好:
public LigaMannschaftenZuordnungenRepository(SpielbetriebDbContext context) : base(context)
{
}https://stackoverflow.com/questions/71070786
复制相似问题