ABP结合MongoDB集成依赖注入

ABP结合MongoDB集成依赖注入

2023年7月18日发(作者:)

ABP结合MongoDB集成依赖注⼊1.我们再ABP项⽬添加⼀个.NET Core类库 类库名⾃定定义, 我这⾥定义为 TexHong_b添加NuGet包。ABPmongocsharpdriver

添加 ///

/// 定义扩展⽅法 允许配置ABP MongoDB模块 /// public static class AbpMongoDbConfigurationExtensions { /// /// ⽤于配置ABP MongoDB模块。 /// public static IAbpMongoDbModuleConfiguration AbpMongoDb(this IModuleConfigurations configurations) { return (); } }添加 internal class AbpMongoDbModuleConfiguration : IAbpMongoDbModuleConfiguration { public string ConnectionString { get; set; } public string DatabaseName { get; set; } }添加 IAbpMongoDbModuleConfiguration public interface IAbpMongoDbModuleConfiguration { string ConnectionString { get; set; } string DatabaseName { get; set; } }

添加 ///

/// Implements IRepository for MongoDB. /// /// Type of the Entity for this repository public class MongoDbRepositoryBase : MongoDbRepositoryBase, IRepository where TEntity : class, IEntity { public MongoDbRepositoryBase(IMongoDatabaseProvider databaseProvider) : base(databaseProvider) { } } /// /// Implements IRepository for MongoDB. /// /// Type of the Entity for this repository /// Primary key of the entity public class MongoDbRepositoryBase : AbpRepositoryBase where TEntity : class, IEntity { public virtual MongoDatabase Database { get { return _se; } } public virtual MongoCollection Collection { get { return _lection(typeof(TEntity).Name); } } private readonly IMongoDatabaseProvider _databaseProvider; public MongoDbRepositoryBase(IMongoDatabaseProvider databaseProvider) { _databaseProvider = databaseProvider; } public override IQueryable GetAll() { return yable(); } public override TEntity Get(TPrimaryKey id) { var query = .EQ(e => , id); var entity = e(query); if (entity == null) { throw new EntityNotFoundException("There is no such an entity with given primary key. Entity type: " + typeof(TEntity).FullName + ", primary key: " + id); } return entity; } public override TEntity FirstOrDefault(TPrimaryKey id) { var query = .EQ(e => , id); return e(query); } public override TEntity Insert(TEntity entity) { (entity); return entity; } public override TEntity Update(TEntity entity) { (entity); return entity; } public override void Delete(TEntity entity) { Delete(); } public override void Delete(TPrimaryKey id) { var query = .EQ(e => , id); (query); } }添加

///

/// Implements Unit of work for MongoDB. /// public class MongoDbUnitOfWork : UnitOfWorkBase, ITransientDependency { /// /// Gets a reference to MongoDB Database. /// public MongoDatabase Database { get; private set; } private readonly IAbpMongoDbModuleConfiguration _configuration; /// /// Constructor. /// public MongoDbUnitOfWork( IAbpMongoDbModuleConfiguration configuration, IConnectionStringResolver connectionStringResolver, IUnitOfWorkFilterExecuter filterExecuter, IUnitOfWorkDefaultOptions defaultOptions) : base( connectionStringResolver, defaultOptions, filterExecuter) { _configuration = configuration; BeginUow(); }#pragma warning disable protected override void BeginUow() { //TODO: ver(MongoClient)' is obsolete: 'Use the new API instead. Database = new MongoClient(_tionString) .GetServer() .GetDatabase(_seName); }#pragma warning restore public override void SaveChanges() { }#pragma warning disable 1998 public override async Task SaveChangesAsync() { }#pragma warning restore 1998 protected override void CompleteUow() { }#pragma warning disable 1998 protected override async Task CompleteUowAsync() { }#pragma warning restore 1998 protected override void DisposeUow() { } }添加 /// /// Implements that gets database from active unit of work. /// public class UnitOfWorkMongoDatabaseProvider : IMongoDatabaseProvider, ITransientDependency { public MongoDatabase Database { get { return _se; } } private readonly MongoDbUnitOfWork _mongoDbUnitOfWork; public UnitOfWorkMongoDatabaseProvider(MongoDbUnitOfWork mongoDbUnitOfWork) { _mongoDbUnitOfWork = mongoDbUnitOfWork; } }添加 ic interface IMongoDatabaseProvider { /// /// Gets the . /// MongoDatabase Database { get; } }添加 TexHong_

///

/// This module is used to implement "Data Access Layer" in MongoDB. /// [DependsOn(typeof(AbpKernelModule))] public class TexHong_EMWXMongoDBModule : AbpModule { public override void PreInitialize() { er();

// 配置 MonggoDb 数据库地址与名称 IAbpMongoDbModuleConfiguration abpMongoDbModuleConfiguration = goDb(); tionString = "mongodb://admin:123qwe@118.126.93.113:27017/texhong_em"; seName = "texhong_em"; } public override void Initialize() { erAssemblyByConvention(typeof(TexHong_EMWXMongoDBModule).GetAssembly());

er>(); } }最后项⽬的架构

添加单元测试 MongoDbAppService_

public class MongoDbAppService : TexHong_EMWXTestBase { private readonly MongoDbRepositoryBase _mongoDbUserRepositoryBase;

public MongoDbAppService() { this._mongoDbUserRepositoryBase = Resolve>(); } [Fact] public async Task CreateUsers_Test() { long Id = ( - 6200000) / 10000;

await _AndGetIdAsync(new User() { Id= Id, Name = "123", EmailConfirmationCode = "1111", UserName = "2222" }); User user = _(Id); }

}注意单元测试要引⽤ MongoDb项⽬。同时在属性依赖 DependsOn 把Mongodb 的 Module添加进去,不然会导致运⾏失败⽆法注⼊。

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689647865a273571.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信