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>();
        }

Хотелось бы узнать, каким образом я могу реализовать данный подход для связи уровней бизнес логики и доступа к данным?
  • Вопрос задан
  • 834 просмотра
Решения вопроса 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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
MSP360 Санкт-Петербург
от 90 000 до 170 000 ₽
Почта Банк Москва
от 200 000 до 240 000 ₽
Кошелёк.ру Санкт-Петербург
До 350 000 ₽
08 апр. 2020, в 08:47
1000 руб./за проект
08 апр. 2020, в 08:33
25000 руб./за проект