C# Autofac 6-根据其他服务的可用性注册装饰器

C# Autofac 6-根据其他服务的可用性注册装饰器,c#,decorator,autofac,C#,Decorator,Autofac,在v6之前,如果我想根据另一个服务的可用性注册一个decorator-而不是根据应用的其他decorator-,我可以执行以下操作: builder.RegisterType() .As(新装饰服务(类型为(IapClient))) .onlyf(b=>b.IsRegistered(新类型的服务(类型of(IApiCallMetricsReceiver))); 这已经不起作用了。没有应用装饰程序。这样做的原因似乎是,在内部,现在新的v6中间件机制用于装饰器 现有的.RegisterDecora

在v6之前,如果我想根据另一个服务的可用性注册一个decorator-而不是根据应用的其他decorator-,我可以执行以下操作:

builder.RegisterType()
.As(新装饰服务(类型为(IapClient)))
.onlyf(b=>b.IsRegistered(新类型的服务(类型of(IApiCallMetricsReceiver)));
这已经不起作用了。没有应用装饰程序。这样做的原因似乎是,在内部,现在新的v6中间件机制用于装饰器

现有的
.RegisterDecorator
重载只允许传入
Func
,但
IDecoratorContext
不允许我检查服务是否已注册,它仅用于检查装饰器链和目标实例

不幸的是,我不能仅仅通过复制
RegisterDecorator
的源代码并根据需要进行调整来创建另一个本地扩展方法,因为类型
decoratormiddware
是内部的

那么,用v6实现我所需要的功能的方法是什么?目前,我能想到的唯一方法是始终注册装饰师,然后再进行一次注册:

builder.RegisterType()
.As()
。如果未注册(类型为(IApiCallMetricsReceiver));
但这将是一个非常丑陋的解决方法,因为我会完全不必要地添加一个什么都不做的装饰器

如果相关,我之所以需要它,是因为装饰器的上述注册驻留在不同项目使用的程序集中的一个模块中,并且只有在其中一些中,度量是相关的,因此它们注册一个提供
IApiCallMetricsReceiver
的类型

我在代码库中多次得到相同的模式

如果您能提供任何帮助,我将不胜感激,因为这使我目前无法升级到Autofac v6,而且我讨厌不能及时更新Autofac之类的核心库。

这是一个非常好的问题。不幸的是,我认为我不会有一个令人满意的答案:

在Autofac v6中。。。你不能真正做你想做的事。马上出于您提到的原因,现在不仅仅是关于服务,而是关于管理解决方案管道

但是!若要获得对装饰器的支持,请执行
OnlyIf
。我们最近刚刚实现了一个允许这种情况发生的方法,所以这是一个非常好的时机

我没有最后期限/预计到达时间,但这是在雷达上。如果您愿意,您可以订阅该期,然后继续阅读。

这是一个非常好的问题。不幸的是,我认为我不会有一个令人满意的答案:

在Autofac v6中。。。你不能真正做你想做的事。马上出于您提到的原因,现在不仅仅是关于服务,而是关于管理解决方案管道

但是!若要获得对装饰器的支持,请执行
OnlyIf
。我们最近刚刚实现了一个允许这种情况发生的方法,所以这是一个非常好的时机

我没有最后期限/预计到达时间,但这是在雷达上。如果你愿意,你可以订阅这期杂志