Asp.netcore下用DependencyInjection分离业务处理

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

成都创新互联公司主营含山网站建设的网络公司,主营网站建设方案,成都App定制开发,含山h5成都微信小程序搭建,含山网站营销推广欢迎含山等地区企业咨询

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

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

/// 
/// 用户操作接口
/// 
public interface IUserRepository
{
    /// 
    /// 添加用户
    /// 
    /// 用户名
    /// 用户密码
    void AddUser(string userName, string password);
    /// 
    /// 查询全部用户
    /// 
    /// 
    /// 
    List GetAllUsers();
}
/// 
/// SQL Server Entity Framework实现的用户管理类型
/// 
public class UserRepository : IUserRepository
{
    /// 
    /// 数据库实体
    /// 
    readonly PermissionContext _db;
    /// 
    /// 用户管理构造
    /// 
    /// StartUp.ConfigureServices依赖注入的数据库Context
    public UserRepository(PermissionContext db)
    {
        _db = db;
    }
    /// 
    /// 添加用户
    /// 
    /// 用户名
    /// 用户密码
 
    public void AddUser(string userName,string password)
    {
        _db.Users.Add(new BeginDemo.User() { UserName = userName, Password = password });
        _db.SaveChanges();
    }
    /// 
    /// 查询全部用户
    /// 
    /// 
    public List GetAllUsers()
    {
        return _db.Users.ToList();
    }
}

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

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

 

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

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

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

public class HomeController : Controller
{
    readonly IUserRepository _userRep;
    public HomeController(IUserRepository userRep)
    {
        _userRep = userRep;
    }
    public IActionResult Index()
    {
        return View(_userRep.GetAllUsers());
    }
}

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

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


文章名称:Asp.netcore下用DependencyInjection分离业务处理
转载来源:http://myzitong.com/article/gpscci.html