Как мне передать параметры в контейнер Autofac для автоматического разрешения зависимостей через библиотеку инъекций Autofac.Dependency - PullRequest
0 голосов
/ 28 октября 2018

Вот проблема.В настоящее время я использую Autofac для разрешения всех зависимостей с TypedParameters в моем приложении AspNetCore MVC, но я думаю, что я делаю что-то не так, и я могу сделать это чище.

Ниже приведены примеры кода

  • Конфигурация для служб.
  • Пример хранилища для внедрения
  • Используемый текущий метод
  • Что я хочу сделать

Конфигурация:

public static void Configure(IConfiguration cfg,IServiceCollection services)
    {
        /// some code is skipped here. Module registrant is just pulling out 
        /// the services from dlls and register them. 
        ioCBuilder.Populate(services);
        ioCBuilder.RegisterModule(new ModuleRegistrant(cfg, registrantOptions));

        IoCHelper.Container = ioCBuilder.Build();
    }

Образец репозитория:

public class PriorityRepository: IPriorityRepository   
{
    public PriorityRepository(DbContext db)
    {
        Db = db;
    }

    /// <inheritdoc />
    public Priority GetDefault()
    {
        return Db.Set<Priority>().SingleOrDefault(it => it.IsDefault);
    }
}

В настоящее время я получаю репозиторий со следующими данными:

public class PriorityController: Controller
{
    public PriorityController(TestContext db)
    {  
       var ctxParam = new TypedParameter(typeof(DbContext), db);
       PriorityRepository = IoCHelper.Container.Resolve<IPriorityRepository>(ctxParam);  
    }
    public IPriorityRepository PriorityRepository { get; set;} 
}

Я хочу, чтобы это было что-то подобное

public class PriorityController: Controller
    {
        public PriorityController(IPriorityRepository priorityRepo)
        {  
           PriorityRepository = priorityRepo;
        }
        public IPriorityRepository PriorityRepository { get; set;} 
    }

Так что в основном вопрос заключается в следующем: как ввести уже зарегистрированные типы, которые имеют немного другой тип (большеабстрактный) в конструкторе?

1 Ответ

0 голосов
/ 29 октября 2018

Func используется для разрешения параметризованных зависимостей в Autofac.

Пожалуйста, пройдите по ссылке https://autofaccn.readthedocs.io/en/latest/resolve/relationships.html#parameterized-instantiation-func-x-y-b для получения подробной информации о реализации и других доступных опций.

...