Декораторы с разными аргументами конструктора
Используя Castle Windsor, я хотел бы создать класс, который записывает целое число. Но я бы хотел несколько раз украсить его другими классами. Я могу видеть, как это работает, если все вовлеченные бетоны имеют зависимости, которые могут быть разрешены, но здесь это не так. Рассмотрим этот код:
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;
}
}
И зарегистрирован с:
container.Register(Component.For<IRecorder>().ImplementedBy<NotifyingRecorder>());
container.Register(Component.For<IRecorder>().ImplementedBy<ModelUpdatingRecorder>());
РазрешениеIRecorder
никогда не будет работать здесь, так какModelUpdatingRecorder
имеет необязательную зависимость. Я не могу использовать статическую зависимость, так какseed
не известно во время компиляции.
Есть ли способ указатьseed
параметр во время выполнения, и украшение все еще работает?
Этот пример кода является упрощением моего сценария, но идея та же. У меня есть декораторы, и самый низкий полагается на конкретное значение / экземпляр, который будет предоставлен ему.