Asp.net core下用Dependency Injection分离业务处理

简介:


关于asp.net core中的Dependency Injection的介绍参见https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection

其实本文思路很简单,就是在StartUp.ConfigureServicesORM(这里用的是EF)注入,然后再把业务类注入,使用的时候从Controller中获取业务类对象使用即可。这种场景适合多种数据库,只需在StartUp.ConfigureServices中要怕appsetting.json的配置来确定注入什么样的ORM或数据连接,和什么样的实现业务子类就可以,还是来看五代码实现吧。

1、首先这义业务模块的操作接口和类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/// <summary>
/// 用户操作接口
/// </summary>
public  interface  IUserRepository
{
     /// <summary>
     /// 添加用户
     /// </summary>
     /// <param name="userName">用户名</param>
     /// <param name="password">用户密码</param>
     void  AddUser( string  userName,  string  password);
     /// <summary>
     /// 查询全部用户
     /// </summary>
     /// <param name="mark"></param>
     /// <returns></returns>
     List<User> GetAllUsers();
}
/// <summary>
/// SQL Server Entity Framework实现的用户管理类型
/// </summary>
public  class  UserRepository : IUserRepository
{
     /// <summary>
     /// 数据库实体
     /// </summary>
     readonly  PermissionContext _db;
     /// <summary>
     /// 用户管理构造
     /// </summary>
     /// <param name="db">StartUp.ConfigureServices依赖注入的数据库Context</param>
     public  UserRepository(PermissionContext db)
     {
         _db = db;
     }
     /// <summary>
     /// 添加用户
     /// </summary>
     /// <param name="userName">用户名</param>
     /// <param name="password">用户密码</param>
  
     public  void  AddUser( string  userName, string  password)
     {
         _db.Users.Add( new  BeginDemo.User() { UserName = userName, Password = password });
         _db.SaveChanges();
     }
     /// <summary>
     /// 查询全部用户
     /// </summary>
     /// <returns></returns>
     public  List<User> GetAllUsers()
     {
         return  _db.Users.ToList();
     }
}


也可以定义另外的实现IUserRepository接口的子类,来分离不同ORM的实现。

2、接着在StartUp.ConfigureServices中添加注入(ORM注放和业务类注入)

 

1
2
3
4
5
//添加EF对象
services.AddDbContext<PermissionContext>(options => options.UseSqlServer(Configuration.GetConnectionString( "DefaultConnection" )));
  
//添加用户操作对象,可以在这里切换注入的子类(不同的子类实现不同数据库或ORM操作)
services.AddSingleton<IUserRepository, UserRepository>();

关于EFasp.net core的应用,请参照:http://axzxs.blog.51cto.com/730810/1894317

3、接下来就可以很快乐的在Controller中使用业务模块了:

1
2
3
4
5
6
7
8
9
10
11
12
public  class  HomeController : Controller
{
     readonly  IUserRepository _userRep;
     public  HomeController(IUserRepository userRep)
     {
         _userRep = userRep;
     }
     public  IActionResult Index()
     {
         return  View(_userRep.GetAllUsers());
     }
}


ORM发生变化时,HomeControllerView是不变的,因为这里使用的是IUserRepository接口,利用依赖倒转的原则降低模块的耦合,提升了程序的扩展性。


代码参考:https://github.com/axzxs2001/Asp.NetCoreExperiment













本文转自桂素伟51CTO博客,原文链接:http://blog.51cto.com/axzxs/1895227 ,如需转载请自行联系原作者



相关文章
|
10天前
|
开发框架 前端开发 .NET
asp.net core 使用 AccessControlHelper 控制访问权限
asp.net core 使用 AccessControlHelper 控制访问权限
|
22天前
|
Cloud Native API C#
C#的现代化:.NET Core引领的技术革命
【6月更文挑战第9天】`.NET Core引领C#现代化,实现跨平台革命,提升性能并支持云原生应用。异步编程模型优化体验,统一API简化开发流程。C#应用场景扩展,开发效率提高,技术创新加速,预示其未来在技术领域将持续发挥关键作用。`
30 10
|
2天前
|
开发框架 .NET Nacos
使用 Nacos 在 C# (.NET Core) 应用程序中实现高效配置管理和服务发现
使用 Nacos 在 C# (.NET Core) 应用程序中实现高效配置管理和服务发现
10 0
|
4天前
|
存储 JSON NoSQL
技术心得记录:在.NETCore中使用CSRedis
技术心得记录:在.NETCore中使用CSRedis
|
5天前
|
SQL 开发框架 .NET
(20)ASP.NET Core EF创建模型(必需属性和可选属性、最大长度、并发标记、阴影属性)
(20)ASP.NET Core EF创建模型(必需属性和可选属性、最大长度、并发标记、阴影属性)
|
25天前
|
开发框架 .NET Linux
【.NET Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
该文介绍了如何不使用VS2019手动创建ASP.NET Core Blazor项目的Dockerfile并构建Docker镜像。首先,创建名为Dockerfile的文件,并复制提供的Dockerfile内容,该文件指定了基础镜像和工作目录。然后,通过CMD在项目目录下运行`docker build -t 自定义镜像名 .`来生成镜像。最后,使用`docker run`命令启动容器并验证项目运行。此外,文章还提到了将镜像推送到Azure Container Registry (ACR)的步骤。
|
25天前
|
Linux C# C++
【.NET Developer】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
本文介绍了如何使用VS2019和.NET框架创建一个Blazor应用,并将其部署到Azure应用服务。首先,Blazor是一个使用C#而非JavaScript构建交互式Web UI的框架,支持共享服务器和客户端应用逻辑,以及与Docker和Azure集成。任务包括创建Blazor项目,配置Dockerfile为Linux容器,本地测试,发布到Azure Container Registry (ACR),然后在Azure App Service for Container上部署。在部署过程中,需确保Docker设置正确,开启ACR的Admin访问权限,并监控镜像拉取和容器启动日志。
|
9月前
|
开发框架 前端开发 .NET
ASP.NET Core 核心特性学习笔记「下」
ASP.NET Core 核心特性学习笔记「下」
|
9月前
|
开发框架 前端开发 中间件
ASP.NET Core 核心特性学习笔记「上」
ASP.NET Core 核心特性学习笔记「上」
|
SQL 机器学习/深度学习 Cloud Native
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 更新和迁移)--学习笔记
- 状态 - 自动变更检测 - 不查询删除和更新 - 并发
231 0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 更新和迁移)--学习笔记