基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(1) - 依赖注入三层框架搭建

  概述  

  本文章描述如何搭建 ASP.NET Core 2.0 WebAPI 依赖注入三层架构,为什么要加入依赖,并不是为了提供程序性能,而是为了项目间解耦,项目之间能够更加独立。


  步骤

  1. 新建解决方案,添加一个ASP.NET Core WebApi应用

  2. 添加四个.Net Core类库:Entity、BLL、DAL、Common

  3. 按照以下截图进行解决方案布局

  4. 添加DAL层文件

  • 在 DAL -> Interfaces 文件夹下,添加接口 IDalService.cs 。这里的数据库上下文依赖注入是为目录作准备的,先添加上。

    public interface IDalService<T> where T : class, new()
    {
        /// <summary>
        /// 新增实体
        /// </summary>
        /// <param name="entity">实体</param>
        /// <returns></returns>
        T AddEntity(T entity);

        /// <summary>
        /// 获取集合
        /// </summary>
        /// <param name="where">linq语句</param>
        /// <returns></returns>
        IQueryable<T> GetEntities(Expression<Func<T, bool>> where);

        /// <summary>
        /// 保存数据
        /// </summary>
        /// <returns></returns>
        int SaveChanges();
    }

IDalService

  • 在 Dal -> Implements 文件夹下,添加基类 DalService.cs。

public class DalService<T> : IDisposable, IDalService<T> where T : class, new()
    {
        private readonly MyContext _context;

        /// <summary>
        /// 获得数据库上下文
        /// </summary>
        /// <param name="context">依赖注入的数据库上下文</param>
        public DalService(MyContext context)
        {
            _context = context;
        }

        public T AddEntity(T entity)
        {
            _context.Set<T>().Add(entity);
            return entity;
        }

        public IQueryable<T> GetEntities(Expression<Func<T, bool>> where)
        {
            return _context.Set<T>().Where(where);
        }

        public int SaveChanges()
        {
            return _context.SaveChanges();
        }

        public void Dispose()
        {
            _context.Dispose();
        }
    }

DalService

  注意,这里只是简单的三个方法:添加、查找、保存数据库,这三个已经足够做演示,如有需要,请另外添加,如删除、更新等。

  • 在 Entity 下添加数据库上下文 MyContext.cs

    public class MyContext : DbContext
    {
        public MyContext() : base()
        {

        }

        public MyContext(DbContextOptions<MyContext> options)
                    : base(options)
        {

        }

        override protected void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);
        }
    }

MyContext

 

  5. 添加BLL层文件

  • 在 BLL -> Interfaces 文件夹下,添加接口 IBllService.cs

    public interface IBllService<T> where T : class, new()
    {
        T AddEntity(T entity, bool isSave);

        IQueryable<T> GetEntities(Expression<Func<T, bool>> where);

        int SaveChanges();
    }

IBllService

  • 在 BLL -> Implements 文件夹下,添加基类 BllService.cs

    /// <summary>
    /// 数据逻辑层:BLL
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class BllService<T> : IBllService<T> where T : class, new()
    {

        /// <summary>
        /// 数据库服务
        /// </summary>
        protected IDalService<T> _dal;

        public BllService(IDalService<T> dal)
        {
            _dal = dal;
        }

        public T AddEntity(T entity, bool isSave)
        {
            entity = _dal.AddEntity(entity);
            if (isSave)
            {
                if (SaveChanges() > 0)
                    return null;
            }
            return entity;
        }

        public IQueryable<T> GetEntities(Expression<Func<T, bool>> where)
        {
            return _dal.GetEntities(where);
        }

        public int SaveChanges()
        {
            return _dal.SaveChanges();
        }
    }

BllService

  6. 最后,在 Startup.cs 中,添加依赖映射。

        public void ConfigureServices(IServiceCollection services)
        {
            DIRegister(services);

            services.AddMvc();
        }

        // 配置依赖注入映射关系
        public void DIRegister(IServiceCollection services)
        {
            services.AddTransient(typeof(IDalService<>), typeof(DalService<>));
        }

Startup

  所有步骤完成后,解决方案目录如下

  

  到此为止,三层架构已经全部完成,是不是觉得很简单呢。下一章,我们将基于这个三层框架,使用MySQL数据库,进行基于EF Core的DbFirst开发。

原文地址:https://www.cnblogs.com/loda7023link/p/9161661.html

时间: 2024-12-25 00:02:51

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(1) - 依赖注入三层框架搭建的相关文章

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(0) - 目录概述

概述 博主自毕业后,进公司就一直是以ASP.NET MVC 5.0 + MySQL 进行项目开发,在项目也使用了很多常用功能,如 WCF.SignalR.微信公众号API.支付宝API.Dapper等等,前端是大杂烩,如:Bootstrap.AmazeUI.EasyUI.Light7.WeUI等等.其实对于我们公司的项目来说,技术栈虽说不庞大,但五脏俱全,而且基于这一套技术,开发速度有保证.但是,作为一个有梦想的程序猿,必须与时俱进,因此无意中接触了.Net Core 2.0.听说它是开源的?它

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(4) - EF Core CodeFirst 数据库创建

概述 在 基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(2) - EF Core (MySQL) CodeFirst 数据库迁移与依赖注入 一文中,我们介绍如何快速以CodeFirst快速搭建数据库,这一章,我们来完善一下创建数据库中可以添加的验证与约束. 微软爸爸官方文档:Entity Framework Core 数据库操作 (1) 数据库迁移  add-migration [任一名称,须唯一] (2) 更新数据库  update-database (3) 删除数据库迁

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(2) - EF Core (MySQL) CodeFirst 数据库迁移与依赖注入

概述 上一章,我们简单的搭建了依赖注入的三层架构,但是,没有真正的使用,而我们现在就使用MySQL数据,基于 EF Core 的 DbFirst 进行框架搭建. 微软爸爸官方文档:使用新数据库在 ASP.NET Core 上开始使用 EF Core    数据库表字段命名规范 步骤 1. 右击 Entity 项目,点击"管理NuGet程序包" 2. 安装以下三个包 Microsoft.EntityFrameworkCore     安装版本:2.1.0 Microsoft.Entity

[译]基于ASP.NET Core 3.0的ABP v0.21已发布

基于ASP.NET Core 3.0的ABP v0.21已发布 在微软发布仅仅一个小时后, 基于ASP.NET Core 3.0的ABP v0.21也紧跟着发布了. v0.21没有新功能.它只是升级到稳定的ASP.NET Core 3.0. 查看v0.20发行说明以获取新功能,增强功能和错误修复. 关于v1.0 ABP框架越来越接近v1.0.我们打算在今年10月中旬发布1.0. 现在,我们将完善测试和文档. .NET Conf 2019 微软已经在为期3天的虚拟会议.NET Conf 2019发

ASP.NET Core中使用自定义MVC过滤器属性的依赖注入

原文:ASP.NET Core中使用自定义MVC过滤器属性的依赖注入 除了将自己的中间件添加到ASP.NET MVC Core应用程序管道之外,您还可以使用自定义MVC过滤器属性来控制响应,并有选择地将它们应用于整个控制器或控制器操作. ASP.NET Core中常用的MVC过滤器之一是  ExceptionFilterAttribute,用于处理Wep API应用程序中的错误响应.它很容易实现,开发人员和我在ASP.NET Core中使用MVC过滤器属性所面临的问题是访问Startup.cs类

ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介

参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-2.2&tabs=visual-studio 与https://www.jianshu.com/p/349e130e40d5 当一个WebApi完成之后,书写API文档是一件非常头疼的事,因为不仅要写得清楚,能让调用接口的人看懂,又是非常耗时耗力的一件事.在之前的一篇随笔中(

基于ASP.NET Core 3.0快速搭建Razor Pages Web应用

前言 虽然说学习新的开发框架是一项巨大的投资,但是作为一个开发人员,不断学习新的技术并快速上手是我们应该掌握的技能,甚至是一个.NET Framework开发人员,学习.NET Core 新框架可以更快速掌握其中的编写,构建,测试,部署和维护应用程序. 您现有的.NET Framework应用程序可以在其他操作系统上工作.对于希望扩大类库的受众平台,或者希望在分布式应用程序的其他领域使用相同代码的开发人员来说,这是非常好的选择. .NET Core是为了重新启动某些Framework组件而为其他

asp.net core 2.0 webapi集成signalr

在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.NET CORE貌似挺流行的,闲来无事也自己搞了个asp.net core signalr 博客园里面也有人在.net core 2.0下面集成了signalr,但是是集成在同一个项目里面的,但是大家都知道我们很多的项目都是分离的: 而且signalr涉及到连接数和内存资源的占用问题,如果都集成在一个项目里面当访问量多大的时候容易造成网站访问缓慢,具体原因就不多说了 所

用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(2)

第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 为Domain Model添加约束 前一部分, 我们已经把数据库创建出来了. 那么我们先看看这个数据库. 可以在项目里面建立一个database.sql, 并且建立一个数据库连接的profile(参考上一篇文章), 连接成功后执行下面语句: SELECT TABLE_NAME FROM tvdb.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE T