Роман: я примерно понимаю логику работы IoC контейнера, но Вы так и не ответили на мой вопрос.
Допустим, на уровне доступа к данным есть интерфейс IRepository, класс PersonRepository, реализующий его.
На уровне бизнес логики (проект Class Library) прописан класс PersonService, работающий с PersonRepository, как с сервисом. (Так же заносится в конструктор, как Ваш пример с контроллером: public PersonService(IRepository repository).
В обычном (не Core) проекте я использовал IoC Ninject, где в классе ServiceModule : NinjectModule я биндил интерфейс и класс Bind().To() по аналогии с services.AddTransient, PersonRepository>();
Непонятна именно реализация этого кода для слоев бизнес логики и доступа к данным, как я и писал выше. Так как в Class Library попросту нет класса Startup, как в приложении ASP.NET Core.
Роман: т. е. в классе Startup следует объявлять зависимости как между слоями представления и бизнес логики, так и между слоями бизнес логики и доступа к данным?
Конечно, я именно эту цель и преследую. Просто привел пример использования IServiceProvider'а в классе Startup. Проблема в том, что в библиотеке классов нет точки входа и непонятно, как именно использовать этот контейнер в данном случае (между уровнем бизнес логики и доступа к данным). Иными словами, куда следует добавить строку кода, приведенную Вами: "services.AddTransient()"
Станислав Макаров: сервисы расположены на уровне бизнес логики, которая выполняет весьма стандартные для этого уровня функции. Что же касается уровня доступа к данным, то на нем используется Entity Framework Core. Следует отметить, что на этом же уровне я использую паттерн проектирования "репозиторий".
Допустим, на уровне доступа к данным есть интерфейс IRepository, класс PersonRepository, реализующий его.
На уровне бизнес логики (проект Class Library) прописан класс PersonService, работающий с PersonRepository, как с сервисом. (Так же заносится в конструктор, как Ваш пример с контроллером: public PersonService(IRepository repository).
В обычном (не Core) проекте я использовал IoC Ninject, где в классе ServiceModule : NinjectModule я биндил интерфейс и класс Bind().To() по аналогии с services.AddTransient, PersonRepository>();
Непонятна именно реализация этого кода для слоев бизнес логики и доступа к данным, как я и писал выше. Так как в Class Library попросту нет класса Startup, как в приложении ASP.NET Core.