C # MVC5 AutoFac IoC - разрешение на основе запрашивающего класса - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь настроить Autofac в проекте MVC5, чтобы он возвращал конкретную реализацию интерфейса, основываясь на классе, который его запрашивает.

Это то, что я много сделал с PHP, используя Laravel Framework, который предлагает решение, подобное приведенному ниже:

$this->app->when(PhotoController::class)
          ->needs(Filesystem::class)
          ->give(function () {
              return Storage::disk('local');
          });

До сих пор мой поиск в Google был коротким, и в большинстве ответов предлагалось ввести либо Фабрику (вызывающую Контейнер), либо Контейнер сам, и извлекать Службу, в которой я нуждаюсь.

Неужели нет способа достичь чего-то похожего на вышесказанное?

1 Ответ

0 голосов
/ 08 ноября 2018

Существуют опции для регистрации условных зависимостей, проще всего с Autofac является именованная регистрация (AFAIK):

builder.Register(c => new DiskStorage()).Named<IStorage>("disk");
builder.Register(c => new PhotoController(c.ResolveNamed<IStorage>("disk")));
...