专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

ASP.NET Core开发-获取所有注入(DI)服务

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 1:03:52       共计:3638 浏览



获取ASP.NET Core中所有注入(DI)服务,在ASP.NET Core中加入了Dependency Injection依赖注入。


我们在Controller,或者在ASP.NET Core程序中的其他地方使用注入的服务,如logging 等。


我们要怎样获取ASP.NET Core中所有注入(DI)服务呢,下面我们来一探究竟, 也可以来看看ASP.NET Core到底注入了哪些服务。


依赖注入简单介绍:


依赖注入(Dependency injection , DI)是一种实现对象及其合作者或依赖项之间松散耦合的技术。将类用来执行其操作的这些对象以某种方式提供给该类,而不是直接实例化合作者或使用静态引用。




我们新建一个ASP.NET Core 空应用程序。


然后Startup 中定义一个变量 private IServiceCollection _services;

复制代码


   public class Startup

   {

       private IServiceCollection _services;

       // This method gets called by the runtime. Use this method to add services to the container.

       // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940

       public void ConfigureServices(IServiceCollection services)

       {

           _services = services;

       }


       // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

       public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

       {

           loggerFactory.AddConsole();

           var _logger = loggerFactory.CreateLogger("Services");

           _logger.LogInformation($"Total Services Registered: {_services.Count}");

           foreach (var service in _services)

           {

               _logger.LogInformation($"Service: {service.ServiceType.FullName}\n      Lifetime: {service.Lifetime}\n      Instance: {service.ImplementationType?.FullName}");

           }


           if (env.IsDevelopment())

           {

               app.UseDeveloperExceptionPage();

           }


           app.Run(async (context) =>

           {

               await context.Response.WriteAsync("Hello World!");

           });

       }

   }


复制代码


在 Configure 中使用Logger打印出来。


执行程序,可以看到,默认有14个服务。




然后我们也可以将这些服务在网页中展示出来。


我们在 Configure 中加入如下代码:

复制代码


       public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

       {

           loggerFactory.AddConsole();

           var _logger = loggerFactory.CreateLogger("Services");

           _logger.LogInformation($"Total Services Registered: {_services.Count}");

           foreach (var service in _services)

           {

               _logger.LogInformation($"Service: {service.ServiceType.FullName}\n      Lifetime: {service.Lifetime}\n      Instance: {service.ImplementationType?.FullName}");

           }


           if (env.IsDevelopment())

           {

               app.Map("/allservices", builder => builder.Run(async context =>

               {

                   context.Response.ContentType = "text/html; charset=utf-8";

                   await context.Response.WriteAsync($"<h1>所有服务{_services.Count}个</h1><table><thead><tr><th>类型</th><th>生命周期</th><th>Instance</th></tr></thead><tbody>");

                   foreach (var svc in _services)

                   {

                       await context.Response.WriteAsync("<tr>");

                       await context.Response.WriteAsync($"<td>{svc.ServiceType.FullName}</td>");

                       await context.Response.WriteAsync($"<td>{svc.Lifetime}</td>");

                       await context.Response.WriteAsync($"<td>{svc.ImplementationType?.FullName}</td>");

                       await context.Response.WriteAsync("</tr>");

                   }

                   await context.Response.WriteAsync("</tbody></table>");

               }));

               app.UseDeveloperExceptionPage();

           }


           app.Run(async (context) =>

           {

               await context.Response.WriteAsync("Hello World!");

           });

       }


复制代码


然后我们使用自宿主的方式执行,在地址栏输入 http://localhost:5000/allservices


同样可以看到14个服务,这里我将/allservices 放在 Development 环境下,只有在程序调试时才能看到,运行是不行的。




我们在项目添加 Microsoft.AspNetCore.Mvc.Core 的引用 。


然后在 ConfigureServices 中加入


       public void ConfigureServices(IServiceCollection services)

       {

           services.AddMvcCore();//添加MvcCore

           _services = services;

       }




我们就可以看到MvcCore 里多加注入的服务


http://localhost:5000/allservices


可以看到增加很多的服务。我们也可以添加其他的,然后查看注入了哪些服务。




如果你觉得本文对你有帮助,请点击“推荐”,谢谢。


版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:.Net Core 自动扫描注入之Scrutor批量依赖注入 | ·下一条:利用.net Core 对程序集中的类 进行统一依赖注入

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有