主键为Guid类型的仓储基类 FonourRepositoryBase<TEntity> : FonourRepositoryBase<TEntity, Guid> where TEntity : Entity { public FonourRepositoryBase(FonourDbContext dbContext) : base(dbContext) { } }
2.1 用户管理仓储接口实现在Fonour.EntityFrameworkCore项目的“Repositories”文件夹中新建一个用户管理仓储接口的实现类“UserRepository”,实现接口中定义的用户检查方法。
用户管理仓储实现 UserRepository : FonourRepositoryBase<User>, IUserRepository { public UserRepository(FonourDbContext dbcontext) : base(dbcontext) { } 检查用户是存在 User CheckUser(string userName, string password) { return _dbContext.Set<User>().FirstOrDefault(it => it.UserName == userName && it.Password == password); } }
3 应用服务层接口定义及实现在Fonour.Application项目中新建一个名称为“UserApp”的文件夹,文件夹中新建一个名称为“IUserAppService”的服务接口,及服务接口的具体实现“UserAppService”,在服务层中调用对应的仓储方法实现具体相关业务逻辑。
UserAppService中定义一个私有且只读的用户管理仓储接口对象,依然通过构造函数的方式进行依赖注入。
用户管理服务 UserAppService : IUserAppService { IUserRepository _userReporitory; 构造函数 实现依赖注入 UserAppService(IUserRepository userRepository) { _userReporitory = userRepository; } public User CheckUser(string userName, string password) { return _userReporitory.CheckUser(userName, password); } }
4 Asp.Net Core依赖注入实现在上一节中,我们讲到在Fonour.MVC项目的Startup.cs文件的ConfigureServices方法中通过使用
services.AddDbContext<FonourDbContext>(options =>options.UseNpgsql(sqlConnectionString));
方法将数据库上上下文添加到系统服务中,正是在此时同时对数据访问上下文进行了依赖注入实现。
通过添加以下代码在ConfigureServices方法中添加对上面创建的仓储及服务进行依赖注入的实现。
services.AddScoped<IUserRepository, UserRepository>(); services.AddScoped<IUserAppService, UserAppService>();
注意:Asp.Net Core提供的依赖注入拥有三种生命周期模式,由短到长依次为:
对于数据访问上下文,我们可以通过重载方法的第二个参数,控制数据访问上下文对象的生命周期,默认生命周期为Scoped。