Castle Windsor: Принудительное использование преобразователем указанного конструктора

Вот пример:

interface IComponentA {};

class ComponentA : IComponentA { };

interface IComponentB { };

class ComponentB : IComponentB { };

interface IComponentC { };

class ComponentC : IComponentC
{
    public ComponentC(IComponentA a)
    {
        Console.WriteLine("Constructor A"); 
    }

    public ComponentC(IComponentB b) 
    {
        Console.WriteLine("Constructor B");
    }
};

Все эти компоненты зарегистрированы в контейнере Castle Windsor.

Но класс ComponentC имеет 2 перегруженных конструктора. Любой из них можно использовать, когда активирован ComponentC .

Мне нужен конструктор ComponentC (IComponentB b) .

Какое-то время я использую метод UsingFactoryMethod (), чтобы решить эту проблему:

container
    .Register(Component
        .For<IComponentA>()
        .ImplementedBy<ComponentA>())
    .Register(Component
        .For<IComponentB>()
        .ImplementedBy<ComponentB>())
    .Register(Component
        .For<IComponentC>()
        .UsingFactoryMethod(() => new ComponentC(
            container.Resolve<IComponentB>())));

Он работает, но, вероятно, Castle Windsor предлагает лучший способ сделать это?

Любая помощь действительно приветствуется.

Спасибо.

7
задан Alexander Stepaniuk 24 November 2012 в 20:48
поделиться