Как передать зависимость от объекта с помощью Castle Windsor и MS Test? - PullRequest
3 голосов
/ 10 июня 2010

Я пытаюсь использовать Castle Windsor с MS Test. Тестовый класс, похоже, использует конструктор по умолчанию. Как настроить Castle для разрешения службы в конструкторе?

Вот конструкторы класса теста:

private readonly IWebBrowser _browser;

        public DepressionSummaryTests()
        {

        }

        public DepressionSummaryTests(IWebBrowser browser)
        {
            _browser = browser;
        }

Мой компонент в конфигурации приложения выглядит так:

 <castle>
    <components>
      <component id="browser"
                 service="ConversationSummary.IWebBrowser, ConversationSummary"
                 type="ConversationSummary.Browser" />       

    </components>
  </castle>

Вот мой контейнер приложений:

public class ApplicationContainer : WindsorContainer
    {
        private static IWindsorContainer container;

        static ApplicationContainer()
        {
            container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));
        }
        private static IWindsorContainer Container
        {
            get { return container; }
        }

        public static IWebBrowser Browser
        {
            get { return (IWebBrowser) Container.Resolve("browser"); }
        }
    }

MS test требует конструктора по умолчанию. Чего мне не хватает?

Спасибо!

1 Ответ

1 голос
/ 10 июня 2010

Поскольку MSTest требует конструктор по умолчанию, это также означает, что он только использует этот конструктор.Таким образом, вы никогда не сможете заставить его использовать перегруженный конструктор.Это не проблема Касл Виндзор, а просто способ работы MSTest.

Хотя это не так уж и сложно, потому что вам не нужно использовать контейнер для юнит-тестирования в любом случае.

Когда вы используете Windsor, вы можете рассмотреть возможность использования Fluent Registration API вместо XML .

Другое дело, что вам не следует использовать статическую службуЛокатор - это анти-паттерн .Это означает, что класс ApplicationContainer является избыточным и должен быть удален.

...