关于asp.net core中的Dependency Injection的介绍参见https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection
其实本文思路很简单,就是在StartUp.ConfigureServices把ORM(这里用的是EF)注入,然后再把业务类注入,使用的时候从Controller中获取业务类对象使用即可。这种场景适合多种数据库,只需在StartUp.ConfigureServices中要怕appsetting.json的配置来确定注入什么样的ORM或数据连接,和什么样的实现业务子类就可以,还是来看五代码实现吧。
1、首先这义业务模块的操作接口和类:
/// <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注放和业务类注入)
//添加EF对象 services.AddDbContext<PermissionContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); //添加用户操作对象,可以在这里切换注入的子类(不同的子类实现不同数据库或ORM操作) services.AddSingleton<IUserRepository, UserRepository>();
关于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
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。