Использование дочерних контейнеров Castle Windsor для разрешения типа с конкретным экземпляром

В настоящее время я использую функциональность дочернего контейнера Castle Windsor, чтобы переопределить регистрацию определенного типа конкретным экземпляром в фабричном методе. Я использую дочерние контейнеры исключительно для того, чтобы регистрация была временной для одного разрешения - иными словами, я не хочу, чтобы регистрация влияла на все разрешения для этого типа.

Возможно, какой-то код объяснит, что я имею в виду.

У меня есть Func, который действует как фабрикаFunc<IReportCategory, IReportCategoryViewModel>&nbsp;- Я даю ему реализацию IReportCategory, и он возвращает новый экземпляр IReportCategoryViewModel. (IReportCategoryViewModel зависит от IReportCategory).

Это зарегистрировано в замке Виндзор следующим образом:

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

гдеResolveCategoryViewModelFactory&nbsp;реализован следующим образом:

    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>();
        }
    }

Достигнутый выше метод достигает разрешения IReportCategoryViewModel, внедряющего конкретный экземпляр IReportCategory в качестве зависимости. Если у IReportCategoryViewModel есть другие зависимости, которые должны быть удовлетворены, контейнер автоматически вводит их.

Впоследствии я могу использовать Func следующим образом:

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);
    }
    ...

Вопрос:&nbsp;Это похоже на подходящую вещь? Судя по моему впечатлению, в Castle Windsor дочерние контейнеры не рекомендуются - есть ли другой способ достижения того же результата?

Спасибо за вашу помощь.