J'utilise Castle Windsor pour IoC. Il a travaillé très bien, mais tout d'un coup à chaque fois que je tente d'exécuter ma demande, il échoue lors d'un appel ResolveAll
:Castle Windsor ResolveTout échoue avec une exception d'argument de type
var resolved = container.ResolveAll<IValidator>();
Il lance cette exception:
System.ArgumentException occurred
Message=The number of generic arguments provided doesn't equal the arity of the generic type definition.
Parameter name: instantiation
Source=mscorlib
ParamName=instantiation
StackTrace:
at System.RuntimeType.MakeGenericType(Type[] instantiation)
at Castle.MicroKernel.Handlers.DefaultGenericHandler.ResolveCore(CreationContext context, Boolean requiresDecommission, Boolean instanceRequired) in c:\TeamCity\buildAgent\work\1ab5e0b25b145b19\src\Castle.Windsor\MicroKernel\Handlers\DefaultGenericHandler.cs:line 51
InnerException:
La chose vraiment étrange est que ça a bien fonctionné jusqu'à aujourd'hui. Si je reviens à une version avant de commencer à faire cela, même jusqu'à la semaine dernière, j'ai toujours cette erreur. J'ai essayé de redémarrer, etc. Est-ce que quelqu'un a déjà vu ça?
EDIT:
Voici comment j'inscrire les IValidator:
private void registerFromAssembly(IWindsorContainer container, Assembly assembly)
{
container.Register(
AllTypes.FromAssembly(assembly)
.BasedOn<IValidator>()
);
}
Voici comment j'enregistrer le service IPresenterResolver:
container.Register(
Component.For<IPresenterResolver>()
.ImplementedBy<CommandLineArgumentPresenterResolver>()
);
Je dois enlever tous les deux pour obtenir l'application à exécuter maintenant.
Comme l'indique l'erreur, il existe une non-concordance de nombre de paramètres de type entre le type de service et le type d'implémentation. Pouvez-vous poster vos inscriptions? –
Quelle version utilisez-vous? –
@Krzysztof Kozmic: Castle.Core est 2.5.1.2121, Castle.Windsor est 2.5.1.2127. J'ai juste essayé le dernier 2.5.2 et il a le même problème. –