如何解析在构造函数中使用键控过滤器参数注册的组件?

时间:2018-05-27 23:40:45

标签: c# dependency-injection autofac

我有一个服务接口的具体类实现,如下所示:

public class MyService:IService {
     public MyService([KeyFilter("sampleone")] IRepository repoToUse) {
           _repoToUse = repoToUse;
     }

     // rest of code
}

我正在将服务注册为:

builder.Register(ctx => new CustomRepo()).Keyed<IRepository>("sampleone");
builder.RegisterType<MyService>().AsSelf().WithAttributeFiltering();

在我的控制器中,我使用生命周期范围来解析服务。

public class MyTestController:ApiController{
    public MyTestController(ILifteTimeScope scope) {
         var testone = scope.Resolve(typeof(IService));
         var testtwo = scope.Resolve(typeof(MyService));
    }
}

所以我正在解析这些服务,我能够正确解析“testone”但是当应用程序试图解析“testtwo”时,它会抛出一个错误:Autofac.Core.DependencyResolutionException。它基本上表明我无法解析IRepository。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

我嘲笑这是有效的。

我在进程中稍后将该类型注册为self()但没有属性过滤,因此它覆盖了之前的注册。

e.g。

// later on in the execution path.
builder.RegisterType<MyService>().As<IServiceTwo>.AsSelf();