我需要使用 Autofac 实现装饰器模式。
我有两个具有自己实现的类/服务。现在基于一个条件,我需要能够动态调用任一服务类来获取数据。
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();
从控制器 (ControllerClass) 中调用 ServiceClassA,如下所示
ControllerClass : Controller
{
private readonly InterfaceA _serviceClassA;
public Controller(Interface serviceClassA)
{
_serviceClassA = serviceClassA;
}
public ActionResult Get()
{
var obj = _serviceClassA.MethodA();
}
}
进行上述调用时,应根据条件(日期 > 31st March 2020 )调用 ServiceClassB 中的方法 B。为了实现这一点,我们的技术架构师认为 Autofac 的装饰器模式是对现有代码流影响不大的解决方案。
所以我对 ServiceClassA 注册进行了以下更改
builder.RegisterType<ServiceClassA>()
.WithParameter( new resolvedParameter())
.Named<InterfaceA>("serviceClassA")
.InstancePerLifeTimeScope();
builder.RegisterDecorator<InterfaceA>(
(c,serviceClassA) => ServiceDecorator(),
"serviceClassA");
完成上述步骤后,我被卡住了,不知道如何应用条件。在stackoverflow上检查了很多答案,以找到无法解决的解决方案。