ASP.NET Core 2.0使用Autofac实现IOC依赖注入竟然能如此的优雅简便
赖注入 (DI) 的软件设计模式,代码的设计是遵循着“高内聚、低耦合”的原则,使得各个类与类之间的关系依赖于接口,这样做的目的是能更有利于项目代码的维护与扩展。
Autofac
在进入主题之前咱们还是先来简单的认识下鼎鼎大名的“Autofac”吧。那么何为Autofac呢,通俗的讲就是一个开源的,且基于.NET Core、ASP.NET Core、.NET 4.5.1+等框架实现的控制反转(IOC)类库。通过Autofac可以在.NET Core、ASP.NET Core、.NET 4.5.1+等项目上很容易的实现依赖注入,代码很容易就能达到“高内聚、低耦合”的原则。另外,Autofac的中文资料也很多,需要详细了解的也可在网上自行查看。
Autofac官方网站:
1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Linq; 5 using System.Linq.Expressions; 6 using System.Text; 7 using System.Threading.Tasks; 8 9 namespace Lezhima.Data.Interface 10 { 11 public interface IRepository<T> where T : class 12 { 13 /// <summary> 14 /// 从指定的表中获取符合条件的一条实体数据 15 /// </summary> 16 /// <param name="predicate"></param> 17 /// <returns></returns> 18 Task<T> GetAsync(Expression<Func<T, bool>> predicate); 19 } 20 } 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Data; 7 using System.Linq.Expressions; 8 using Microsoft.EntityFrameworkCore; 9 using System.Data.SqlClient; 10 using Lezhima.Data.Interface; 11 12 namespace Lezhima.Data 13 { 14 /// <summary> 15 /// 数据层 16 /// 实现IRepository接口 17 /// </summary> 18 /// <typeparam name="T"></typeparam> 19 public class Repository<T> : IRepository<T> where T : class 20 { 21 22 /// <summary> 23 /// 从指定的表中获取符合条件的一条实体数据 24 /// </summary> 25 /// <param name="predicate"></param> 26 /// <returns></returns> 27 public async Task<T> GetAsync(Expression<Func<T, bool>> predicate) 28 { 29 using (var db = new LezhimaContext()) 30 { 31 if (predicate == null) 32 return null; 33 34 return await db.Set<T>().Where(predicate).FirstOrDefaultAsync<T>(); 35 } 36 } 37 } 38 } 39