Как заставить Castle Windsor вызывать конструктор без параметров?

StackOverflow https://stackoverflow.com/questions/821944

Вопрос

В настоящее время у меня есть класс, который выглядит следующим образом:

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);
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top