繁体   English   中英

如何使用 Autofac 注册装饰器:“检测到循环组件依赖项”

[英]How to register a decorator with Autofac: "Circular component dependency detected"

我有一个循环依赖来扩展添加缓存抽象的对象的功能。

 public class CachedDecorator : IParameter
{
    public CachedDecorator (IParameter decorated);
    ...
}


 public class MyImplementationParameter : IParameter
 {
   ...
 } 

使用 .Net core Dependency injection container 我可以做这样的事情来创建这些依赖项并且它可以工作:

services.AddSingleton<IParameter>(provider => new CachedDecorator 
(provider.GetRequiredService<MyImplementationParameter >()));

如何使用 Autofac 复制该声明?

我正在尝试这样的事情:

   builder.RegisterType<CachedDecorator>()
  .As<IParameter>()
  .WithParameter(
    new ResolvedParameter(
      (pi, ctx) => pi.ParameterType == typeof(MyImplementationParameter ),
      (pi, ctx) => ctx.Resolve<MyImplementationParameter>()));

但我收到“检测到循环组件依赖项:”

从 Autofac 4.9 开始,您可以按如下方式注册您的装饰器:

builder.RegisterType<MyImplementationParameter>().As<IParameter>();
builder.RegisterDecorator<CachedDecorator, IParameter>();

有关更多信息,请参阅文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM