Decoradores con diferentes argumentos de constructor.
Usando Castle Windsor, me gustaría crear una clase que registre un número entero. Pero me gustaría decorarlo varias veces con otras clases. Puedo ver cómo funciona esto si todos los hormigones involucrados tienen dependencias que pueden resolverse, pero ese no es el caso aquí. Considera este código:
public interface IRecorder
{
void Add(int value);
}
public class NotifyingRecorder : IRecorder
{
readonly IRecorder decoratedRecorder;
public NotifyingRecorder(IRecorder decoratedRecorder)
{
this.decoratedRecorder = decoratedRecorder;
}
public void Add(int value)
{
decoratedRecorder.Add(value);
System.Console.WriteLine("Added " + value);
}
}
public class ModelUpdatingRecorder : IRecorder
{
int seed;
public ModelUpdatingRecorder(int seed)
{
this.seed = seed;
}
public void Add(int value)
{
seed += value;
}
}
Y registrado con:
container.Register(Component.For<IRecorder>().ImplementedBy<NotifyingRecorder>());
container.Register(Component.For<IRecorder>().ImplementedBy<ModelUpdatingRecorder>());
Resolviendo unIRecorder
nunca funcionará aquí, ya queModelUpdatingRecorder
tiene una dependencia no opcional. No puedo usar una dependencia estática desdeseed
no se conoce en tiempo de compilación.
¿Hay alguna manera de especificar elseed
parámetro en tiempo de ejecución y la decoración sigue funcionando?
Este ejemplo de código es una simplificación de mi escenario, pero la idea es la misma. Tengo decoradores, y el más bajo depende de un valor / instancia específico que se le proporcione.