¿Cómo hacer que Castle Windsor llame al constructor sin parámetros?
-
03-07-2019 - |
Pregunta
Actualmente tengo una clase que se ve así:
public class MyClass : IMyClass
{
public MyClass()
{
//...
}
public MyClass(IMyRepository repository)
{
//...
}
}
En mi archivo de configuración tengo IMyClass registrado, pero no IMyRepository. Mi intención es que Windsor use el constructor que no toma ningún parámetro, pero recibo este mensaje:
No se puede crear el componente 'MyClass' ya que tiene dependencias por satisfacer. MyClass está esperando lo siguiente dependencias:
Servicios: - Namespace.IMyRepository que no estaba registrado.
Encontré otra publicación que dice que el contenedor llamará al constructor con la mayor cantidad de argumentos que pueda satisfacer. Entonces, ¿por qué está tratando de llamar al constructor con un argumento que no sabe cómo satisfacer?
Solución
Tal vez estás usando una versión antigua de Windsor ... esto funciona bien para mí:
[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);
}
}