Ninject и декораторы

Учитывая:

public interface IBatchProcess
{
    void Run();
}

и множественная реализация:

public class BatchProcessOne : IBatchProcess {... }
public class BatchProcessTwo : IBatchProcess {... }
public class BatchProcessThree : IBatchProcess {... }

и декоратор трассировки:

public class BatchProcessTraceDecorator : IBatchProcess
{
    private readonly IBatchProcess _inner;

    public BatchProcessTraceDecorator( IBatchProcess inner )
    {
        _inner = inner;
    }

    public void Run()
    {
        Trace.TraceInformation( "Starting batch process..." );
        _inner.Run();
        Trace.TraceInformation( "Batch process complete." );
    }
}

Как я могу связать декоратор и все реализации, чтобы при вызове kernel.GetAll я получал 3 экземпляра декоратора трассировки, каждый с другим внутренним пакетным процессом?

Я знаю о Ninject Interception и не хочу использовать для этого прокси-решения по разным причинам. На данный момент похоже, что мне нужно поиграть со стратегией активации для экземпляров IBatchProcess, чтобы они были разрешены, а затем я мог их украсить и вернуть, но я надеюсь, что просто что-то пропустил в API привязки.

5
задан Neal 27 June 2012 в 05:03
поделиться