Вот пример:
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 предлагает лучший способ сделать это?
Любая помощь действительно приветствуется.
Спасибо.