Спасибо за информацию. Причина, по которой я использую XML, заключается в том, что XML на самом деле взят из унаследованного кода, поэтому это было своего рода «отправной точкой». Тем не менее, я бы хотел начать миграцию с Fluent API, следовательно, иметь часть этого в XML и часть в Fluent API.

я есть декоратор и фактическая реализация, которая выглядит так:

public interface IAmUsedTwice
{
    void DoSomething();
}

public class ForReal: IAmUsedTwice
{
    public SomethingElse Need { get; set; }

    public ForReal(SomethingElse iNeed)
    {
        Need = iNeed;
    }

    public void DoSomething()
    {
        Console.WriteLine("Realing doing something here");
    }
}

public class SomethingElse {}

public class DecoratingIsFun: IAmUsedTwice
{
    private IAmUsedTwice Actual { get; set; }

    public DecoratingIsFun(IAmUsedTwice actual)
    {
        Actual = actual;
    }

    public void DoSomething()
    {
        Console.WriteLine("This is a decorator!");
        Actual.DoSomething();
    }
}

и конфигурация была настроена до того, как я начал это, используя xml для фактической реализации и выглядит примерно так:

<component id="forReal"
           service="SomeNamespace.IAmUsedTwice, SomeNamespace"
           type="SomeNamespace.ForReal, SomeNamespace">
  <parameters>
    <iNeed>${iNeed}</iNeed>        
  </parameters>
</component>

и вы можете предположить, что компонент iNeed уже настроен правильно.

Теперь система уже настроена на использование класса ForReal, но я хочу поменять класс ForReal и использовать класс DecoratingIsFun.

Я создал установщик для регистрации класса DecoratingIsFun следующим образом:

public class DecoratorInstaller: IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(
            Component.For<IAmUsedTwice>()
                .ImplementedBy<DecoratingIsFun>()
        );
    }
}

Тем не менее, мне все еще нужно сказать две вещи.

Когда он разрешает IAmUsedTwice, я хочу, чтобы он теперь разрешал экземпляр DecoratingIsFun вместо другого классаПри разрешении DecoratingIsFun мне нужно разрешить ForReal в качестве аргумента конструктора для создаваемого экземпляра.

Цель состоит в том, чтобы я мог затем вызвать windsorContainer.Resolve () и получить экземпляр DecoratingIsFun.

Как я могу сказать установщику сделать это?

Ответы на вопрос(1)

Ваш ответ на вопрос