Como configurar um decorador com o Castle Windsor?
Tenho um decorador e uma implementação real parecida com esta:
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();
}
}
e a configuração foi configurada antes de eu começar isso usando xml para a implementação real e se parece com isso:
<component id="forReal"
service="SomeNamespace.IAmUsedTwice, SomeNamespace"
type="SomeNamespace.ForReal, SomeNamespace">
<parameters>
<iNeed>${iNeed}</iNeed>
</parameters>
</component>
e você pode assumir que o componente iNeed já está configurado corretament
gora, o sistema já está configurado para usar a classe ForReal, mas o que eu quero fazer é trocar a classe ForReal e usar a classe DecoratingIsFun agor
Criei um instalador para registrar a classe DecoratingIsFun da seguinte forma:
public class DecoratorInstaller: IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<IAmUsedTwice>()
.ImplementedBy<DecoratingIsFun>()
);
}
}
o entanto, ainda preciso dizer duas coisa
Quando resolve IAmUsedTwice, quero que resolva uma instância de DecoratingIsFun a partir de agora em vez da outra classe Ao resolver DecoratingIsFun, preciso resolver o ForReal como um argumento construtor para a instância que está criandO objetivo será que eu possa chamar windsorContainer.Resolve () e obter uma instância DecoratingIsFu
Como posso dizer ao instalador para fazer isso?