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 ,如需转载请自行联系原作者



相关文章
|
18天前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
38 5
|
1月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
44 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
26天前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
27 3
|
3天前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
16 0
|
2月前
|
开发框架 JavaScript 前端开发
一个适用于 ASP.NET Core 的轻量级插件框架
一个适用于 ASP.NET Core 的轻量级插件框架
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
51 7
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
84 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
63 0
|
4月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
4月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
152 0