当使用Microsoft.Extensions.DependencyInjection作为容器时,如何注册装饰器类?
以下列方式注册我的类型(类似于Castle Windsor)时,我得到一个“System.InvalidOperationException:检测到循环依赖关系”错误,解决了IMyService类型:
services.AddSingleton<IMyService, MyService>();
services.AddSingleton<IMyService, MyServiceDecorator>();
装饰器注册似乎不支持开箱即用,但有没有办法添加支持或解决问题?
答案 0 :(得分:4)
使用Scrutor项目以下列方式注册似乎可以让装饰者正确解析:
services.AddSingleton<IMyService, MyService>();
services.Decorate<IMyService, MyServiceDecorator>();
Decorate是名称空间中的扩展方法:Scrutor项目中的Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions。