Как передать IConfiguration от контроллера API на уровень доступа к данным - PullRequest
0 голосов
/ 28 декабря 2018

Я новичок в ядре ASP.net и пытаюсь преобразовать мои существующие RESTful WepAPI в ASP.Net Core API (2.2).

Ниже представлена ​​структура моего приложения: [WebAPI Methods] вызывает ->Вызовы [Уровень бизнес-логики (BLL)] -> [Уровень доступа к данным (DAL)].

Чтобы открыть соединение с БД из DAL, я вызываю статический метод другой библиотеки классов (Infrstructure.Data.dll).) и передавая имя строки подключения как Enum.Эта библиотека получает фактическую строку подключения из Web.Config webAPI с использованием следующего

string connString = ConfigurationManager.ConnectionStrings[GetDatabaseHint(dbSource)].ConnectionString;

и возвращает IDbConnection, который мой DAL использует для транзакции с БД.

Теперь я ищу похожие опции в основном веб-API ASP.net.

До сих пор я придумал следующее:

  1. В автозагрузке.cs файл API, добавленные сервисы. AddSingleton (конфигурация);

  2. В библиотеку классов Infrstructure.Data.dll добавлено

    private static IConfiguration _config;
    public ConnectionFactory(IConfiguration config)
    {
        _config = config;
    }
    
    public static IDbConnection GetConnection(DBSource dbSource)
    {
        string connString = _config.GetConnectionString(GetDatabaseHint(dbSource));
    
    
        //... Code to create connection using DB Providers
    
        return conn;
    }
    

IConfiguration всегда имеет значение null здесь, в этом файле Infrstructure.Data.dll.

Пожалуйста, дайте мне знать, если это неправильный подход, и каким должен быть правильный способ достижения этого.

1 Ответ

0 голосов
/ 31 декабря 2018

Выполните следующие действия для доступа к IConfiguration в Infrstructure.Data

  1. Определить ConnectionFactory

    public class ConnectionFactory
    {
        private static IConfiguration _config;
        public ConnectionFactory(IConfiguration config)
        {
            _config = config;
        }
        public string GetConnection()
        {
            return _config.GetConnectionString("any connection string name");
        }
        //public static IDbConnection GetConnection(DBSource dbSource)
        //{
        //    return new dbc
        //}
    }
    
  2. Регистрация ConnectionFactoryв Startup.cs

    services.AddScoped<ConnectionFactory>();
    
  3. Использование

    public class HomeController : Controller
    {
        private ApplicationDbContext _context;
        private readonly ConnectionFactory connectionFactory;
        public HomeController(ApplicationDbContext context
            , ConnectionFactory connectionFactory)
        {
            _context = context;
            this.connectionFactory = connectionFactory;
        }
        public IActionResult Index()
        {
            string result = connectionFactory.GetConnection();            
            return View();
        }
    }
    

    Примечание IConfiguration зарегистрировано по умолчанию WebHost.CreateDefaultBuilder(args)

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }
    
        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...