一、准备工作

通过程序包管理器控制台安装AutoFac:

Install-Package Autofac.Extensions.DependencyInjection

创建新类库(.NetCore 2.2类库),存放接口跟实现类,命名为NetCoreWebApi.Repository。

创建用户仓储接口

在类库项目上右键->添加->新建文件夹,命名为Interface,存放接口类。在Interface文件夹下面新建类:IUserRepository,属性如下:

using System.Collections.Generic;
using NetCoreWebApi.Model.Models; namespace NetCoreWebApi.Repository.Interface
{
/// <summary>
/// 用户接口
/// </summary>
public interface IUserRepository
{
/// <summary>
/// 添加用户
/// </summary>
/// <param name="entity">实体对象</param>
int Add(TbUser entity);
/// <summary>
/// 删除用户
/// </summary>
/// <param name="entity">实体对象</param>
int Remove(TbUser entity);
/// <summary>
/// 编辑用户
/// </summary>
/// <param name="entity">实体对象</param>
/// <returns></returns>
int Update(TbUser entity);
/// <summary>
/// 获取所有
/// </summary>
/// <returns></returns>
IList<TbUser> GetAll();
}
}

创建用户接口实现类

在类库项目上右键->添加->新建文件夹,命名为Implement,存放接口实现类。在Implement文件夹下面新建类:UserRepository,属性如下:

using System.Collections.Generic;
using System.Linq;
using NetCoreWebApi.Model;
using NetCoreWebApi.Model.Models;
using NetCoreWebApi.Repository.Interface; namespace NetCoreWebApi.Repository.Implement
{
/// <summary>
/// 业务处理
/// </summary>
public class UserRepository:IUserRepository
{
private readonly MyDbContext _dbContext;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="dbContext"></param>
public UserRepository(MyDbContext dbContext)
{
_dbContext = dbContext;
}
/// <summary>
/// 添加用户
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public int Add(TbUser entity)
{
_dbContext.TbUsers.Add(entity);
return _dbContext.SaveChanges();
}
/// <summary>
/// 删除用户
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public int Remove(TbUser entity)
{
_dbContext.TbUsers.Remove(entity);
return _dbContext.SaveChanges();
}
/// <summary>
/// 编辑用户
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public int Update(TbUser entity)
{
return _dbContext.SaveChanges();
}
/// <summary>
/// 查询用户
/// </summary>
/// <returns></returns>
public IList<TbUser> GetAll()
{
return _dbContext.TbUsers.ToList();
}
}
}

二、配置注入

打开Startup.cs类

把ConfigureServices方法的返回值由void变为IServiceProvider

        public static IContainer ApplicationContainer { get; set; }
/// <summary>
/// //负责注入服务
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
public IServiceProvider ConfigureServices(IServiceCollection services)
{
var connectionStr = Configuration.GetConnectionString("SqlServer");
services.AddDbContext<MyDbContext>
(options => options.UseSqlServer(connectionStr,
e => e.MigrationsAssembly("NetCoreWebApi.Model")));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
//初始化容器
var builder = new ContainerBuilder();
//管道寄居
builder.Populate(services);
//注册仓储,IUserRepository接口到UserRepository的映射
builder.RegisterType<UserRepository>().As<IUserRepository>();
//构造
ApplicationContainer = builder.Build();
//将AutoFac反馈到管道中
return new AutofacServiceProvider(ApplicationContainer);
}

三、测试

在项目上右键->添加->新建文件夹,命名为Controllers,存放相应的控制器。在Controllers文件夹下面新建一个控制器:UserController,如下:

using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using NetCoreWebApi.Model.Models;
using NetCoreWebApi.Repository.Interface; namespace NetCoreWebApi.Controllers
{
/// <summary>
/// 用户模块
/// </summary>
[Route("api/user")]
[ApiController]
public class UserController : ControllerBase
{
private readonly IUserRepository _userRepository; /// <summary>
/// 构造函数
/// </summary>
/// <param name="userRepository"></param>
public UserController(IUserRepository userRepository)
{
_userRepository = userRepository;
}
/// <summary>
/// 创建用户
/// </summary>
/// <returns></returns>
[Route("createUser")]
[HttpPost]
public TbUser CreateUser()
{
var user = new TbUser
{
UserId = Guid.NewGuid().ToString("N"),
CreateTime = DateTime.Now,
UserName = "tenghao",
Email = "tenghao510@qq.com"
};
_userRepository.Add(user);
return user;
}
/// <summary>
/// 查询用户
/// </summary>
/// <returns></returns>
[Route("getUser")]
[HttpGet]
public IList<TbUser> GetUser()
{
return _userRepository.GetAll();
}
}
}

Ctrl+F5 运行之后,先用Postman调创建用户接口

接下来测试下查询用户

好了,你们自己测下写的有没有问题。

ASP.NET Core 2.2 WebApi 系列【三】AutoFac 仓储接口的依赖注入的更多相关文章

  1. ASP.NET Core 2.2 WebApi 系列【九】使用SignalR (作者:tenghao510 ) 学习及内容补充

    原文地址:  ASP.NET Core 2.2 WebApi 系列[九]使用SignalR 今天,看到了大牛的这篇博文,  发了一下评论, 我很惊喜, 没想到他很快就回复了我,  而且通过QQ帮助了S ...

  2. ASP.NET Core 3.0 WebApi 系列【1】创建ASP.NET Core WebApi 项目

    目录 写在前面 一.运行环境 二.项目搭建 三.测试 API 四.基础知识 五.写在最后 写在前面 C#语言可以创建RESTful服务,被称作WebApi.在这里总结学习使用支持创建.读取.更新.删除 ...

  3. ASP.NET Core 2.2 WebApi 系列【一】搭建ASP.NET Core WebApi项目

    一.步骤 从“文件”菜单中选择“新建”>“项目” . 选择“ASP.NET Core Web 应用程序”模板,再单击“下一步” . 将项目命名为 NetCoreWebApi,然后单击“创建” . ...

  4. ASP.NET Core 3.0 WebApi 系列【2】.Net Core 3.0+ CodeFirst + MySql 实现数据的迁移

    写在前面 在前一小节中,我们创建了基于RESFULL风格的服务.这个小节,尝试使用CodeFirst+MySql 的方式实现数据迁移. 一.开发环境 [1]运行环境:win10 家庭版 [2]开发工具 ...

  5. ASP.NET Core 2.2 WebApi 系列【六】泛型仓储模式

    为什么要使用泛型仓储?好处是? 前两章在autofac注入的时候,用的User类作为例子,写了增删改查四个接口,也就是仓储的GRUD. 当我们再添加一个实体(比如Student)时,StudentRe ...

  6. ASP.NET Core快速入门学习笔记(第3章:依赖注入)

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务16:介绍 1.依赖注入概念详解 从UML和软件建模来理解 从单元测试来理 ...

  7. ASP.NET Core 2.2 WebApi 系列【八】统一返回格式(返回值、模型验证、异常)

    现阶段,基本上都是前后端分离项目,这样一来,就需要前后端配合,没有统一返回格式,那么对接起来会很麻烦,浪费时间.我们需要把所有接口及异常错误信息都返回一定的Json格式,有利于前端处理,从而提高了工作 ...

  8. ASP.NET Core 2.2 WebApi 系列【五】MiniProfiler与Swagger集成

    MiniProfiler 是一款性能分析的轻量级程序,可以基于action(request)记录每个阶段的耗时时长,还是可以显示访问数据库时的SQL(支持EF.EF Code First)等 一.安装 ...

  9. ASP.NET Core 2.2 WebApi 系列【四】集成Swagger

    Swagger 是一款自动生成在线接口文档+功能测试功能软件 一.安装程序包 通过管理 NuGet 程序包安装,搜索Swashbuckle.AspNetCore 二.配置 Swagger 将 Swag ...

随机推荐

  1. Python之工作方向

    "python基础-->(函数/面向对象/网络编程(scoket套接字)/并发编程(mutiprocessing)) "运维+web开发-->页面展示(django/f ...

  2. 《Java基础知识》Java类与类之间的关系

    类与类之间最常见的关系主要有三种:依赖(uses-a).聚合(has-a)和继承(is-a). 下面以在线书店订单系统为例,来详细的讲述这三种关系的概念. 在线书店订单系统的主要功能是:注册用户可以登 ...

  3. Git打包指定分支所提交的文件

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/da7e233a-c ...

  4. 虚拟化和Docker

    1.硬件层的虚拟化具有高性能和隔离性,因为hypervisor直接在硬件上运行,有利于控制VM的OS访问硬件资源,使用这种解决方案的产品有VMware ESXI和Xen server. 2.hyper ...

  5. conda pip 安装 dgl 并运行demo 出现:Segmentation fault (core dumped) 错误

    安装dgl 并运行的时候,出现了如上错误,很是郁闷:使用 gdb python; run train.py 进行调试,发现是torch的问题:我猜测估计是torch 安装的版本过于新:于是重新安装 1 ...

  6. QT获取linux下的当前用户名

    故事背景:客户端启动的时候需要加载机器/home/xx/test.jpg的图片作为背景图,但是有的机器用户名叫AAA,有的机器名叫BBB,所以我需要获取当前用户的home目录 技术调研:QStanda ...

  7. Linux selinux 规则导致audit拒绝

    Linux selinux 规则导致audit拒绝 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-09-26. 查看 audit2why -d audit2allow 这两个命令. ...

  8. c博客06-2019-结构体&文件

    1.本章学习总结 1.1 学习内容总结 结构体如何定义.成员如何赋值: 1.常见的定义: struct student { int num; char name[20]; }stu; //2.采用ty ...

  9. python高阶函数——sorted排序算法

    python 内置的sorted()函数可以对一个list进行排序: >>> sorted([8,3,8,11,-2]) [-2, 3, 8, 8, 11] 既然说是高阶函数,那么它 ...

  10. SQL Server Agent作业执行CmdExec(bat)命令报权限问题

    写了一个bat命令,定期去清理一些SQL Server的Dump文件,然后配置成SQL Server作业,作业执行时报权限错误,具体错误信息如下所示: Message Executed as user ...