Utilizando contenedores secundarios Castle Windsor para resolver un tipo con una instancia específica

Actualmente estoy usando la funcionalidad de contenedor secundario de Castle Windsor para anular el registro de un tipo particular con una instancia específica en un método de fábrica. Estoy usando los contenedores secundarios únicamente para que el registro sea temporal para una única resolución; en otras palabras, no quiero que el registro afecte a todas las resoluciones para ese tipo.

Quizás algún código explique lo que quiero decir.

Tengo un Func que actúa como una fábricaFunc<IReportCategory, IReportCategoryViewModel>: Le doy una implementación de IReportCategory y devuelve una nueva instancia de IReportCategoryViewModel. (IReportCategoryViewModel depende de IReportCategory).

Esto está registrado con Castle Windsor de la siguiente manera:

        container.Register(
            Component.For<Func<IReportCategory, IReportCategoryViewModel>>().Instance(
                category => ResolveCategoryViewModelFactory(container, category)));

DóndeResolveCategoryViewModelFactory se implementa de la siguiente manera:

    private CategoryViewModel ResolveCategoryViewModelFactory(IWindsorContainer container, IReportCategory category)
    {
        using (IWindsorContainer childContainer = new WindsorContainer())
        {
            childContainer.Register(Component.For<IReportCategory>().Instance(category));
            container.AddChildContainer(childContainer);

            return childContainer.Resolve<IReportCategoryViewModel>();
        }
    }

Lo que logra el método anterior es la resolución de IReportCategoryViewModel, inyectando la instancia específica de IReportCategory como una dependencia. Si IReportCategoryViewModel tiene otras dependencias que deben satisfacerse, entonces el contenedor las inyecta automáticamente.

osteriormente, puedo usar Func de la siguiente manera:

public class Test
{
    private readonly Func<IReportCategory, IReportCategoryViewModel> factory;

    public Test(Func<IReportCategory, IReportCategoryViewModel> factory)
    {
        this.factory = factory;
    }

    public void ResolveTest()
    {
        // Create a category (note: this would probably be resolved from the container in some way)
        IReportCategory category = new ReportCategory();

        // Call into the factory to resolve the view model
        IReportCategoryViewModel vm = factory(category);
    }
    ...

Pregunta ¿Parece esto algo adecuado para hacer? Por la impresión que tengo, los contenedores infantiles no se recomiendan en Castle Windsor: ¿hay otra forma de lograr el mismo resultado?

Gracias por tu ayuda

Respuestas a la pregunta(2)

Su respuesta a la pregunta