Castle windsor Castle Windsor ResolveAll失败,类型参数异常
我在用温莎城堡作为国际奥委会的代表。它一直工作得很好,但每次我尝试运行应用程序时,它都会在Castle windsor Castle Windsor ResolveAll失败,类型参数异常,castle-windsor,ioc-container,Castle Windsor,Ioc Container,我在用温莎城堡作为国际奥委会的代表。它一直工作得很好,但每次我尝试运行应用程序时,它都会在ResolveAll调用期间突然失败: var resolved = container.ResolveAll<IValidator>(); 真正奇怪的是,它一直工作到今天都很好。如果我回滚到一个版本之前,它开始这样做,甚至回到上周,我仍然得到这个错误。我尝试过重新启动等。以前有人看到过吗 编辑: 以下是我注册IValidator手机的方式: private void register
ResolveAll
调用期间突然失败:
var resolved = container.ResolveAll<IValidator>();
真正奇怪的是,它一直工作到今天都很好。如果我回滚到一个版本之前,它开始这样做,甚至回到上周,我仍然得到这个错误。我尝试过重新启动等。以前有人看到过吗
编辑:
以下是我注册IValidator手机的方式:
private void registerFromAssembly(IWindsorContainer container, Assembly assembly)
{
container.Register(
AllTypes.FromAssembly(assembly)
.BasedOn<IValidator>()
);
}
private void register-romassembly(IWindsorContainer-container,Assembly-Assembly)
{
集装箱。登记(
AllType.FromAssembly(程序集)
.BasedOn()
);
}
以下是我注册IPresenterResolver服务的方式:
container.Register(
Component.For<IPresenterResolver>()
.ImplementedBy<CommandLineArgumentPresenterResolver>()
);
container.Register(
用于()的组件
.由()实施
);
我必须删除这两个选项才能让应用程序立即运行。我必须下载Castle Windsor源代码,以便在出现故障时对其进行调试。事实证明,我错误地包含了一些泛型基类型服务,而我只希望得到非泛型的具体实现。我必须将我的注册码更改为以下代码才能正常工作:
private void registerFromAssembly(IWindsorContainer container,
Assembly assembly)
{
container.Register(
AllTypes.FromAssembly(assembly)
.BasedOn<IValidator>()
.Unless(type => type == typeof(FluentValidatorWrapper<>))
.Unless(type => type == typeof(PassEverythingValidator<>))
);
}
private void registerfrommassembly(IWindsorContainer,
装配(装配)
{
集装箱。登记(
AllType.FromAssembly(程序集)
.BasedOn()
。除非(type=>type==typeof(FluentValidatorWrapper))
。除非(type=>type==typeof(PassEverythingValidator))
);
}
在这种情况下,FluentValidatorWrapper
是我用来构建特定于类型的验证器的通用基本类型,PassEverythingValidator
是我的验证逻辑在找不到特定于类型的验证器时手动实例化的通用类型。这些不应该包含在容器中
我在Castle Windsor邮件列表上做了一个注释,如果具体的类型信息包含在异常中,那么调试就会更容易。正如错误所说,服务类型和实现类型之间存在类型参数计数不匹配。你能发布你的注册吗?@Krzysztof Kozmic:Castle.核心是2.5.1.2121,Castle.温莎是2.5.1.2127。我刚刚试用了最新的2.5.2,它也有同样的问题。@Mauricio Scheffer:我发布了注册信息。
private void registerFromAssembly(IWindsorContainer container,
Assembly assembly)
{
container.Register(
AllTypes.FromAssembly(assembly)
.BasedOn<IValidator>()
.Unless(type => type == typeof(FluentValidatorWrapper<>))
.Unless(type => type == typeof(PassEverythingValidator<>))
);
}