Задать вопрос
stasphere
@stasphere
Студент. 4 курс.

Каким образом я могу использовать IoC контейнер IServiceProvider в .NET Core Class Library?

Архитектура приложения является трехуровневой:
  • Уровень представления - проект ASP.NET Core;
  • Уровни бизнес логики и доступа к данным - проекты Class Library Core.

Как известно, .NET Core предоставляет свой IoC контейнер - IServiceProvider.
Связь между уровнем представления и бизнес логики обеспечивается в классе Startup проекта ASP.NET Core:
public void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient<IService<Person>, PersonService>();
        }

Хотелось бы узнать, каким образом я могу реализовать данный подход для связи уровней бизнес логики и доступа к данным?
  • Вопрос задан
  • 939 просмотров
Подписаться 3 Оценить 2 комментария
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 2
    1 неделя
    Далее
Решения вопроса 1
yarosroman
@yarosroman Куратор тега C#
C# the best
А причем тут IoC? Я думал всегда, что IoC наоборот, чтобы разорвать связь между уровнями.

services.AddTransient, PersonService>(); эта строка не связь обеспечивает, она лишь говорит контейнеру, экземпляр какого конкретного класса создавать при запросе его из контейнера.

если вам необходимо, чтобы в конструктор сервиса передавался контекст данных, то добавляем его в IoC контейнер
services.AddTransient<DdContext>(),
а в конструктор сервиса добавляем параметр, например,
public PersonService(DbContext context)
Те, когда вы запросите экземпляр IService, контейнер, скажем так, рекурсивно будет разрешать зависимости, те увидев зависимость сервиса от DbContext, и зная зарегистрированный класс, контейнер сначала создаст DbContext, затем создаст PersonService, передав в него созданный экземпляр DbContext.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы