При использовании внедрения зависимостей вы не должны создавать какую-либо службу самостоятельно.Чтобы использовать ваш UserService
, вы должны просто вставить это куда-нибудь.
Как правило, поток в ASP.NET Core для кода вашего приложения запускается в контроллере.Поэтому, если вы хотите использовать UserService
внутри действия контроллера, вы должны внедрить его в контроллер:
public class ExampleController : Controller
{
private readonly IUserService _userService;
public ExampleController(IUserService userService)
{
_userService = userService;
}
public IActionResult Index()
{
var isLoggedIn = _userService.IsUserLoggedIn();
// …
return View();
}
}
Так что вы не создаете экземпляр самостоятельно, используя new
, а вместо этого полагаетесьв системе внедрения зависимостей, чтобы предоставить вам экземпляр.
Вам просто нужно обязательно зарегистрировать службу внутри ConfigureServices
:
services.AddTransient<IUserService, UserService>();
Этот принцип действует независимо от того, гдевы находитесь в вашей заявке.Поскольку точка входа всегда создается системой, вы всегда находитесь внутри контекста внедрения зависимостей, поэтому вы можете просто зависеть от вещей, которые сами имеют зависимости (которые также могут иметь больше зависимостей и т. Д.).
IНастоятельно рекомендую вам прочитать главу о внедрении зависимостей в документации, так как она очень хорошо отражает идею.Это также объясняет, что означают разные времена жизни.