С Castle Windsor 3.2 Мне нужно разрешить реализацию сервиса на лету в зависимости от контекстных параметров. Вот простой пример того, что я хочу сделать:Замок Виндзор, выбрав реализацию сервиса в зависимости от некоторых параметров контекста
У меня есть службы IFoo
public interface IFoo
{
object GetSomething();
}
Реализовано 2 различных классов Foo1 и Foo2
public class FooBase
{
public int Number {get; private set;}
public FooBase(int number)
{
Number = number;
}
}
public class Foo1 : IFoo
{
public Foo1(int number):base(number)
public object GetSomething()
{
return "Foo1";
}
}
public class Foo2 : IFoo
{
public Foo2(int number):base(number)
public object GetSomething()
{
return "Foo2";
}
}
Я хочу, чтобы позвонить в Виндзорский замок разрешить метод с номером в качестве параметра и в зависимости от числа, которое я хочу иметь: Foo1 или Foo2:
var foo1 = container.Resolve<IFoo>(new {number= 1});
// foo1 is Foo1
var foo2 = container.Resolve<IFoo>(new {number= 2});
// foo2 is Foo2
Я пробовал несколько потенциальных решений, но я очень смущен из-за отсутствия документации и примеров Castle Windsor, добавив, что большинство примеров не обновлены и используют устаревший API.
Так что я видел несколько примеров, используя следующие понятия, но ни один из них не казался большим мое требование:
- HandlerSelector
- типизированного завод объект
- UsingFactoryMethod
Можете ли вы предоставить более подробную информацию о вашем сценарии ? Что поставляет значение «число» во время выполнения? Я предполагаю, что есть какой-то объект контекста где-то, где хранятся эта информация? Возможно, есть способ сделать это с фабриками типов и т. Д., Но это пахнет обычной моделью, в которой я использую HandlerSelectors на регулярной основе, но имеет значение владелец «числа». Возможно, вы сможете немного изменить свое желаемое решение и получить гораздо более чистый результат. – kellyb