Виндзор - вытащить временные объекты из контейнера

Как я могу вытащить объекты из контейнера, которые являются переходными по природе? Нужно ли регистрировать их в контейнере и вставлять в конструктор нужного класса? Впрыскивать все в конструктор не очень хорошо. Также только для одного класса я не хочу создаватьTypedFactory и ввести фабрику в нуждающийся класс.

Еще одна мысль, которая пришла ко мне, была «новая» их по мере необходимости. Но я также делаю инъекциюLogger компонент (через свойство) во все мои классы. Поэтому, если я обновлю их, мне придется вручную создать экземплярLogger в этих классах. Как я могу продолжать использовать контейнер для ВСЕХ моих классов?

Впрыск Logger: Большинство моих занятийLogger определено свойство, за исключением случаев, когда существует цепочка наследования (в этом случае только базовый класс имеет это свойство, и все производные классы используют его). Когда они создаются через контейнер Windsor, они получают мою реализациюILogger впрыскивается в них.

//Install QueueMonitor as Singleton
Container.Register(Component.For<QueueMonitor>().LifestyleSingleton());
//Install DataProcessor as Trnsient
Container.Register(Component.For<DataProcessor>().LifestyleTransient());

Container.Register(Component.For<Data>().LifestyleScoped());

public class QueueMonitor
{
    private dataProcessor;

    public ILogger Logger { get; set; }

    public void OnDataReceived(Data data)
    {
        //pull the dataProcessor from factory    
        dataProcessor.ProcessData(data);
    }
}

public class DataProcessor
{
    public ILogger Logger { get; set; }

    public Record[] ProcessData(Data data)
    {
        //Data can have multiple Records
        //Loop through the data and create new set of Records
        //Is this the correct way to create new records?
        //How do I use container here and avoid "new" 
        Record record = new Record(/*using the data */);
        ...

        //return a list of Records    
    }
}


public class Record
{
    public ILogger Logger { get; set; }

    private _recordNumber;
    private _recordOwner;

    public string GetDescription()
    {
        Logger.LogDebug("log something");
        // return the custom description
    }
}

Вопросов:

Как мне создать новыйRecord объект без использования «нового»?

QueueMonitor являетсяSingleton, в то время какData является "Scoped". Как я могу ввестиData вOnDataReceived() метод?

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

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