设为首页 加入收藏

TOP

DotNetCore依赖注入实现批量注入(一)
2019-09-17 19:08:28 】 浏览:106
Tags:DotNetCore 依赖 注入 实现 批量

文章转载自平娃子(QQ:273206491):http://os.pingwazi.cn/resource/batchinjectservice

一、依赖注入

       通过依赖注入,可以实现接口与实现类的松耦合。Asp.Net Core底层设计支持依赖注入。系统中存在的内置服务(Mvc、DbContext等等)的依赖注入和自定义服务的依赖注入。其中内置服务的依赖注入,可以直接调用IServiceCollection的扩展方法(AddMvc()、AddDbContext())。

二、.Net Core底层所实现的依赖注入功能

在使用.Net Core底层所实现的依赖注入功能之前呢,需要先理解依赖注入对象的三种生命周期:

1、Transent(瞬时)生命周期在他们每次请求的时候被创建,这一生命周期适合轻量级和无状态的服务。并且在一次请求中,如果存在多次获取这个实例,那这些实例也是不同的。

2、Scoped(范围)生命周期在每次请求的时候被创建,在一次请求中,如果存在多次获取这个实例,那么返回的也是同一个实例。

3、Singleton(单例)生命周期在它们第一次被请求的时候使用的时候创建,并且只创建一次,后续都是使用的同一个对象。

本实例使用.Net Core内置的依赖注入功能的步骤如下:

1、使用vs2017或者vs2019创建一个.Net Core WebApi项目

2、创建ISay接口,其中定义一个Say方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace IocPrictic
{
    public interface ISay
    {
        string Say();
    }
}

3、创建ISay的实现类ChinseSay

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace IocPrictic
{
    public class ChinseSay : ISay
    {
        public string Say()
        {
            Console.WriteLine("我说中国话");
            return "我说中国话";
        }
    }
}

 

4、在Startup中的ConfigureServices方法中注册ChineseSay服务。

services.AddTransient<ISay, ChinseSay>();

 

5、模板控制器中使用依赖注入的对象。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

namespace IocPrictic.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        private ISay _ISay;
        public ValuesController(ISay isay)
        {
            this._ISay = isay;
        }
        // GET api/values
        [HttpGet]
        public ActionResult<string> Get()
        {
            string sayResult= this._ISay.Say();
            return sayResult;
        }
    }
}

 

三、利用反射实现批量的依赖注入

如果需要注入的对象有多个呢?可能是几十个也可能是几百个,如果全是认为的进行注入的话,这是一个非常麻烦的事情。因此这里引入了反射来实现批量注入的功能。

实现步骤(思想/算法/...)如下:

1、定义一个需要依赖注入的标记接口(INeedInject),这个接口里面什么也没有,仅仅标记一个接口需要进行依赖注入。

2、定义三个生命周期接口,这个三个接口里面什么也没有(ITransentInject、IScopeInject、ISingletonInject),仅仅作为一个类型,在利用反射的时候让其选择对应的生命周期注入方式。

3、定义一个不需要依赖注入的标记接口(INoNeedInject),这个接口是在我们需要更换接口实现类的时候,在旧的实现类上实现这个

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇你用.NET开发APP时,在云平台打包.. 下一篇高字节,低位字节是什么东西

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目