Создание трехуровневой архитектуры в веб-API DotNet Core 2.2 C#

Я работаю над Web API Core 2.2, и мне нужно разработать трехуровневую архитектуру. Как мне это сделать.

Моя структура проекта, как показано ниже

Создание трехуровневой архитектуры в веб-API DotNet Core 2.2 C#

В проекте веб-API..

public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<HrmsDbContext>(opt =>
              opt.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}

В проекте DAL (Library) я создал свой DBContext и предоставил строку подключения, как показано ниже.

Создание трехуровневой архитектуры в веб-API DotNet Core 2.2 C#

Есть ли что-нибудь лучше, чтобы я не предоставлял строку подключения в двух местах? и написать трехуровневую архитектуру в хорошем смысле.

Любая помощь будет оценена.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
4 382
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Слой против уровня

Ваш вопрос касается слоев, а не уровней.

Уровни. Уровень — это просто физическое разделение компонентов вашего приложения.

Слои. Слои действуют как более логические разделители, которые существуют для разделения и организации вашего фактического кода. Вы часто будете слышать такие термины, как «уровень бизнес-логики», «уровень представления» и другие. Это просто способы организации всего кода в вашем приложении.

Если у вас есть веб-приложение, содержащее ваш доступ к данным и бизнес-логику, которое работает на том же компьютере/сервере, то у вас будет трехуровневое приложение на одном уровне.

Теперь, если ваш доступ к данным размещен на другом компьютере/сервере, и ваш бизнес также размещен на другом компьютере/сервере, то теперь у вас будет трехуровневое приложение на трех уровнях.

Установить строку подключения

Вы указали строку подключения при запуске и добавили ее в services. Вам не нужно снова определять строку подключения и использовать контекст БД с помощью встроенного внедрения зависимостей. Код может выглядеть так!

Стартовый класс

public static IServiceCollection AddCustomDbContext(this IServiceCollection services, IConfiguration configuration)
{

    // Add DbContext using SQL Server Provider
    services.AddDbContext<PaymentDbContext>(options =>
        options.UseSqlServer(configuration.GetConnectionString("myconnectionstring"), x => x.MigrationsAssembly("Payment.Persistence")));

    return services;
}

Класс контекста

public class PaymentDbContext : DbContext
    {
        public PaymentDbContext(DbContextOptions<PaymentDbContext> options)
            : base(options)
        {

        }

        public DbSet<Payments> Payments { get; set; }    


    }    

Используйте DI для доступа к контексту

 private readonly PaymentDbContext _context;


 public PaymentsRepository(PaymentDbContext dbContext)
 {
 _context = dbContext;
}

Другие вопросы по теме