Мне нужно реализовать шаблон декоратора с помощью Autofa c.
У меня есть два класса / сервиса с собственной реализацией. Теперь в зависимости от условия мне нужно иметь возможность динамически вызывать любой из классов службы для получения данных.
ServiceClassA : InterfaceA
{
// Method A
}
ServiceClassB : InterfaceB
{
//Method B
}
В настоящее время у меня зарегистрированы ServiceClassA и ServiceClassB, как показано ниже
builder.RegisterType<ServiceClassA>()
.WithParameter( new resolvedParameter())
.As<InterfaceA>()
.InstancePerLifeTimeScope();
builder
.RegisterType<ServiceClassB>()
.As<InterfaceB>()
.InstancePerLifetimeScope();
ServiceClassA вызывается из контроллера (ControllerClass), как показано ниже
ControllerClass : Controller
{
private readonly InterfaceA _serviceClassA;
public Controller(Interface serviceClassA)
{
_serviceClassA = serviceClassA;
}
public ActionResult Get()
{
var obj = _serviceClassA.MethodA();
}
}
При выполнении вышеуказанного вызова на основе условия (дата> 31 марта 2020 г.) должен быть вызван метод B в ServiceClassB. Для достижения этой цели наш технический архитектор считает, что шаблон декоратора с Autofa c - это решение, мало влияющее на существующий поток кода.
Итак, я внес следующие изменения для регистрации ServiceClassA
builder.RegisterType<ServiceClassA>()
.WithParameter( new resolvedParameter())
.Named<InterfaceA>("serviceClassA")
.InstancePerLifeTimeScope();
builder.RegisterDecorator<InterfaceA>(
(c,serviceClassA) => ServiceDecorator(),
"serviceClassA");
после описанных выше шагов. Я застрял, не знаю, где применить условие. Проверил много ответов на stackoverflow, чтобы найти решение, которое не может.