Как заставить Castle Windsor вызывать конструктор без параметров?
-
03-07-2019 - |
Вопрос
В настоящее время у меня есть класс, который выглядит следующим образом:
public class MyClass : IMyClass
{
public MyClass()
{
//...
}
public MyClass(IMyRepository repository)
{
//...
}
}
В моем конфигурационном файле у меня зарегистрирован IMyClass, но не IMyRepository.Мое намерение состоит в том, чтобы Windsor использовал конструктор, который не принимает никаких параметров, но я получаю это сообщение:
Не удается создать компонент 'MyClass', поскольку он имеет зависимости, подлежащие удовлетворению.MyClass ожидает следующего зависимости:
Услуги:- Пространство имен.IMyRepository, которое не было зарегистрировано.
Я нашел еще один пост это говорит о том, что контейнер вызовет конструктор с наибольшим количеством аргументов, которые он может удовлетворить.Так почему же он пытается вызвать конструктор с аргументом, который он не знает, как удовлетворить?
Решение
Возможно, вы используете старую версию Windsor...для меня это работает просто отлично:
[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);
}
}