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

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

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

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