c# – asp.net mvc核心依赖注入构造函数参数
发布时间:2020-12-16 01:28:09 所属栏目:百科 来源:网络整理
导读:我正在尝试理解ASP.NET MVC CORE中的依赖注入. 所有示例都相同,它们显示为注册HttpContextAccessor public void ConfigureServices(IServiceCollection services){ services.AddMvc(); services.AddSingletonIHttpContextAccessor,HttpContextAccessor();}
我正在尝试理解ASP.NET MVC CORE中的依赖注入.
所有示例都相同,它们显示为注册HttpContextAccessor public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddSingleton<IHttpContextAccessor,HttpContextAccessor>(); } 然后是想要访问它的类: public class UserService : IUserService { private readonly IHttpContextAccessor _httpContextAccessor; public UserService(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public bool IsUserLoggedIn() { var context = _httpContextAccessor.HttpContext; return context.User.Identities.Any(x => x.IsAuthenticated); } } 但是,当我真的想要创建一个UserService实例时,它会在构造函数中请求httpContextAccessor对象,我从哪里得到它? 解决方法
使用依赖注入时,您不应该自己创建任何服务.要使用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>(); 无论您在申请中的哪个位置,此原则都适用.由于入口点始终由系统创建,因此您总是在依赖注入上下文中,因此您可以依赖于具有依赖项的事物(这可能具有更多依赖性等). 我强烈建议你阅读文档的chapter on dependency injection,因为它很好地涵盖了这个想法.它还解释了不同的生命周期意味着什么. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |