Asp.Net Core入门之自定义服务注册

具体我们一起看下面的例子:

首先,我们创建一个需要实现查询功能的服务接口ITest

public interface ITest
{
Task Get();
}
然后,我们创建功能类Test实现这个接口

复制代码
1 public class Test : ITest
2 {
3 private readonly ILogger logger;
4 public Test(ILogger _logger)
5 {
6 logger = _logger;
7 }
8 public Task Get()
9 {
10 logger.LogInformation(“自定义服务查询”);
11 return Task.FromResult(“Hello World”);
12 }
13 }
复制代码
最后,我们需要我们自己的服务注册到容器中。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddScoped<ITest, Test>();
    }

以上我们便简单完成了自定义服务的注册。

随后我这里创建了一个Controller用以使用该服务。

复制代码
1 [Route(“api/[controller]”)]
2 [ApiController]
3 public class ValuesController : ControllerBase
4 {
5 //声明服务
6 private readonly ITest service;
7
8 ///
9 /// 通过构造函数的方式注入自定义服务类
10 ///
11 ///
12 public ValuesController(ITest _service)
13 {
14 service = _service;
15 }
16
17 ///
18 /// 调用服务中实现的Get方法
19 ///
20 ///
21 [HttpGet]
22 public Task Get()
23 {
24 return service.Get();
25 }
26 }
复制代码
ASP.Net Core框架默认支持我们以构造函数的方式注入我们的服务以使用。

我想写到这里,大家也会有疑问,如果我们有很多service,这样一个个注册写起来代码很低效,这里我们简单给大家介绍一种批量注册的方式:

这里我们创建了一个批量注册服务派生类:

复制代码
1 public static class ServiceExtensions
2 {
3 ///
4 /// 批量注册程序集下的服务类
5 ///
6 ///
7 public static IServiceCollection AddBatchServices(this IServiceCollection services)
8 {
9 //根据指定程序集名称获取待注册服务
10 var batchServices = GetConfigureClass(“WebApiApplication”);
11 foreach (var type in batchServices)
12 {
13 type.Value.ToList().ForEach(i =>
14 {
15 //注册服务类
16 services.AddScoped(i, type.Key);
17 });
18 }
19 return services;
20 }
21
22 ///
23 /// 根据程序集名称获取自定义服务
24 ///
25 ///
26 ///
27 public static Dictionary<Type, Type[]> GetConfigureClass(string assembly)
28 {
29 Dictionary<Type, Type[]> dic = new Dictionary<Type, Type[]>();
30 if (!string.IsNullOrEmpty(assembly))
31 {
32 //获取程序集对应的类型
33 Assembly dll = Assembly.LoadFrom(assembly);
34 List lstType = dll.GetTypes().ToList();
35 lstType.ForEach(x =>
36 {
37 //筛选满足条件的服务类
38 if (x.IsClass && x.GetInterfaces().Length > 0)
39 {
40 dic.Add(x, x.GetInterfaces());
41 }
42 });
43 }
44 return dic;
45 }
46 }
复制代码
然后我们ConfigureServices方法中注册:

    public void ConfigureServices(IServiceCollection services)
    {
        //批量注册
        services.AddBatchServices();
    }
    龙华大道1号http://www.kinghill.cn/LongHuaDaDao1Hao/index.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值