Как встраивать зависимости в слой доступа к данным, который принимает настройки базы данных в своем конструкторе? - PullRequest
0 голосов
/ 03 мая 2018

Я написал простой интерфейс доступа к данным с общими операциями CRUD, так что каждое хранилище базы данных должно реализовывать этот интерфейс. Сейчас я реализовал этот интерфейс для одной базы данных, скажем, SQL. Эта реализация базы данных SQL принимает параметры базы данных (строку подключения и другие детали) в качестве параметра в своем конструкторе.

См. Ниже код:

namespace MyDataAccessInterfaces
{
   public interface IDataAccess
   {
    read();
    create();
    update();
    delete();
   }
}

namespace MyDataAccessImplementations
{

   public class SQLAccess
   {
     SQLAccess(Settings settings){
     //do something to get DB context
      }

   //some properties here 

    read(){//some code
          }
    create(){//some code
          }
    update(){//some code
          }
    delete(){//some code
          }
   }
}

Теперь я хочу, чтобы зависимости вводили это в сервисный контроллер. Я смотрю на внедрение зависимости конструктора здесь. Если я передам реализацию SQL как зависимость в конструкторе контроллера, как показано ниже, и добавлю это в метод запуска класса-> ConfigureServie, как передать его настройки?

public class HomeController : APIController
{
    private readonly IDataAccess _dataAccess;

    public HomeController(IDataAccess dataAccess)
    {
        _dataAccess= dataAccess;
    }

    public IActionResult Index()
    {
        //do something and set result
        return Ok(result);
    }
}

Ниже приведен мой метод ConfigureService в классе startup.cs

public void ConfigureServices(IServiceCollection services)
{
    // Add application services.
       services.AddSingleton<IDataAccess, SQLAccess>();
}

Вопрос в том, как передать параметры конструктора и значения свойств в метод API Configure Service?

1 Ответ

0 голосов
/ 03 мая 2018
public void ConfigureServices(IServiceCollection services)
{
    // Add application services.
       services.AddSingleton<IDataAccess, SQLAccess>(opt=> { new SQLAccess(new 
       Settings(){ 
           //Set Settings object properties here

       }); 
   });
}
...