Вот проблема.В настоящее время я использую 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;}
}
Так что в основном вопрос заключается в следующем: как ввести уже зарегистрированные типы, которые имеют немного другой тип (большеабстрактный) в конструкторе?