Comment amener Castle Windsor à appeler un constructeur sans paramètre?
-
03-07-2019 - |
Question
Actuellement, j'ai une classe qui ressemble à ceci:
public class MyClass : IMyClass
{
public MyClass()
{
//...
}
public MyClass(IMyRepository repository)
{
//...
}
}
Dans mon fichier de configuration, j'ai enregistré IMyClass, mais pas IMyRepository. Mon intention est que Windsor utilise le constructeur qui ne prend aucun paramètre, mais je reçois ce message:
Impossible de créer le composant "MyClass" tel quel. a des dépendances à satisfaire. MyClass attend le suivant dépendances:
Services: - Namespace.IMyRepository qui n'a pas été enregistré.
J'ai trouvé un autre message indiquant que le conteneur appellera le constructeur avec le plus d'arguments qu'il peut satisfaire. Alors, pourquoi tente-t-il d’appeler le constructeur avec un argument qu’il ne sait pas comment satisfaire?
La solution
Peut-être que vous utilisez une ancienne version de Windsor ... cela fonctionne très bien pour moi:
[TestFixture]
public class WindsorTests {
public interface ISomeInterface {}
public class AService {
public int Id { get; private set; }
public AService() {
Id = 1;
}
public AService(ISomeInterface s) {
Id = 2;
}
}
[Test]
public void Parameters() {
var container = new WindsorContainer();
container.AddComponent<AService>();
var service = container.Resolve<AService>();
Assert.AreEqual(1, service.Id);
}
}