Вот как мое приложение делает вызов к базе данных: Web App -> Бизнес Layer -> Layer DataИспользование наследования и инъекции зависимостей в то же время
Все использует инъекции зависимостей.
Например:
В контроллере в моем веб-приложение, которое я сделать вызов, как это:
await _manager.GetCustomers();
Что входит в мой бизнес-слой:
public class CustomerManager : ICustomerManager
{
private ICustomerRepo _repository;
public CustomerManager(ICustomerRepo repository)
{
_repository = repository;
}
public Task<IList<Customer>> GetCustomers(string name = null)
{
return _repository.GetCustomers(name);
}
}
Что входит в мой уровень данных:
public class CustomerRepo : BaseRepo, ICustomerRepo
{
public CustomerRepo(IConfigurationRoot configRoot)
: base(configRoot)
{
}
public Customer Find(int id)
{
using (var connection = GetOpenConnection())
{
...
}
}
}
Фокус в том, что CustomerRepo наследует от BaseRepo, чтобы иметь возможность использовать функцию GetOpenConnection(). Но в то же время BaseRepo нуждается в IConfigurationRoot, введенном в него из веб-приложения. Как я могу сделать то и другое?
public class BaseRepo
{
private readonly IConfigurationRoot config;
public BaseRepo(IConfigurationRoot config)
{
this.config = config;
}
public SqlConnection GetOpenConnection(bool mars = false)
{
string cs = config.GetSection("Data:DefaultConnection:ConnectionString").ToString();
...
}
}
Как выглядит конструктор 'CustomerRepo'? Требуется ли «IConfigurationRoot» и передать его базовому конструктору? –
В настоящее время у меня нет конструктора в моем CustomerRepo, я думаю, что это может быть то, что мне не хватает! Я не понимаю синтаксиса, как я это сделаю. Если BaseRepo находится в объявлении класса, и конструктор объявляется после этого. Как я могу отправить его в BaseRepo в качестве параметра? Можете ли вы показать мне пример? –
Имеет ли 'BaseRepo' конструктор без параметров? Скомпилируется ли 'CustomerRepo'? –