Как я могу разрешить компонент, который был зарегистрирован с помощью ключевого аргумента фильтра в конструкторе? - PullRequest
0 голосов
/ 28 мая 2018

У меня есть конкретная реализация класса моего интерфейса службы, например:

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 голосов
/ 28 мая 2018

Я дернул, и это работает.

Я позже зарегистрировал тип во время процесса как self (), но без фильтрации атрибутов, поэтому он перезаписал более ранние регистрации.

например

// later on in the execution path.
builder.RegisterType<MyService>().As<IServiceTwo>.AsSelf();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...