DependencyInjection в .NET Core
требует, чтобы вы зарегистрировали свои классы и их зависимости, чтобы он мог создавать / извлекать любые зависимости перед созданием экземпляра вашего класса.
На основании ваших комментариев я предполагаю, что вы не зарегистрированываш LoggingService
с набором сервисов и что вы пытаетесь создать экземпляр на вашем контроллере.
Прежде всего, вам нужно зарегистрировать свой LoggingService
с IServiceCollection
в startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<LoggingService>();
services.AddMvc();
}
Служба DI сообщает, что когда класс запрашивает LoggingService
в своем конструкторе, он должен создать экземпляр этого класса.За кулисами .NET Core
уже зарегистрировал интерфейс IHostingEnvironment
со службой DI, поэтому нам не нужно об этом беспокоиться.Когда службе DI необходимо создать экземпляр нашей LoggingService
, она автоматически внедрит зависимость IHostingEnvironment
.
Теперь нам нужно внедрить класс в наш контроллер:
public class ValuesController : Controller
{
private readonly LoggingService _loggingService;
public ValuesController(LoggingService loggingService)
{
_loggingService = loggingService;
}
...
}
Когда .NET Core
создает экземпляр нашего ValuesController
, он увидит, знает ли он, как создать экземпляр LoggingService
- что делает, потому что мы рассказали ему о нашем классе в startup.cs
.
OneЧто нужно помнить о Dependency Injection, вы почти всегда НИКОГДА не используете new
для создания класса.(Есть исключения из этого, но вы должны всегда пытаться позволить службе DI создавать классы без использования ключевого слова new
.
Я предлагаю вам потратить некоторое время на чтение документации Внедрение зависимостей , поэтому вы полностью понимаете, как работает внедрение зависимостей в ASP.NET Core
и различных доступных областях.