如何使用Microsoft.Extensions.DependencyInjection注册装饰器?

时间:2017-09-28 13:26:30

标签: dependency-injection .net-core ioc-container

当使用Microsoft.Extensions.DependencyInjection作为容器时,如何注册装饰器类?

以下列方式注册我的类型(类似于Castle Windsor)时,我得到一个“System.InvalidOperationException:检测到循环依赖关系”错误,解决了IMyService类型:

services.AddSingleton<IMyService, MyService>();
services.AddSingleton<IMyService, MyServiceDecorator>();

装饰器注册似乎不支持开箱即用,但有没有办法添加支持或解决问题?

1 个答案:

答案 0 :(得分:4)

使用Scrutor项目以下列方式注册似乎可以让装饰者正确解析:

services.AddSingleton<IMyService, MyService>();
services.Decorate<IMyService, MyServiceDecorator>();

Decorate是名称空间中的扩展方法:Scrutor项目中的Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions。