ABP 结合 MongoDB 集成依赖注入
<p>1.我们再ABP项目添加一个.NET Core类库 类库名自定定义, 我这里定义为 TexHong_EMWX.MongoDb</p><p>添加NuGet包。</p>
<p>ABP</p>
<p>mongocsharpdriver</p>
<p><img src="https://img2018.cnblogs.com/blog/1428124/201909/1428124-20190914115906163-1535050405.png"></p>
<p> </p>
<p> </p>
<p>添加 AbpMongoDbConfigurationExtensions.cs</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 定义扩展方法 </span><span style="color: rgba(128, 128, 128, 1)"><see cref="IModuleConfigurations"/></span><span style="color: rgba(0, 128, 0, 1)"> 允许配置ABP MongoDB模块
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> AbpMongoDbConfigurationExtensions
{
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 用于配置ABP MongoDB模块。
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> IAbpMongoDbModuleConfiguration AbpMongoDb(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)"> IModuleConfigurations configurations)
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> configurations.AbpConfiguration.Get<IAbpMongoDbModuleConfiguration><span style="color: rgba(0, 0, 0, 1)">();
}
}</span></pre>
</div>
<p>添加 AbpMongoDbModuleConfiguration.cs</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">internal</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> AbpMongoDbModuleConfiguration : IAbpMongoDbModuleConfiguration
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span> ConnectionString { <span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">; }
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span> DatabaseName { <span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">; }
}</span></pre>
</div>
<p>添加 IAbpMongoDbModuleConfiguration</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> IAbpMongoDbModuleConfiguration
{
</span><span style="color: rgba(0, 0, 255, 1)">string</span> ConnectionString { <span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">; }
</span><span style="color: rgba(0, 0, 255, 1)">string</span> DatabaseName { <span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">; }
}</span></pre>
</div>
<p> </p>
<p>添加 MongoDbRepositoryBase.cs</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> Implements IRepository for MongoDB.
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><typeparam name="TEntity"></span><span style="color: rgba(0, 128, 0, 1)">Type of the Entity for this repository</span><span style="color: rgba(128, 128, 128, 1)"></typeparam></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span> MongoDbRepositoryBase<TEntity> : MongoDbRepositoryBase<TEntity, <span style="color: rgba(0, 0, 255, 1)">int</span>>, IRepository<TEntity>
<span style="color: rgba(0, 0, 255, 1)">where</span> TEntity : <span style="color: rgba(0, 0, 255, 1)">class</span>, IEntity<<span style="color: rgba(0, 0, 255, 1)">int</span>><span style="color: rgba(0, 0, 0, 1)">
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> MongoDbRepositoryBase(IMongoDatabaseProvider databaseProvider)
: </span><span style="color: rgba(0, 0, 255, 1)">base</span><span style="color: rgba(0, 0, 0, 1)">(databaseProvider)
{
}
}
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> Implements IRepository for MongoDB.
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><typeparam name="TEntity"></span><span style="color: rgba(0, 128, 0, 1)">Type of the Entity for this repository</span><span style="color: rgba(128, 128, 128, 1)"></typeparam></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><typeparam name="TPrimaryKey"></span><span style="color: rgba(0, 128, 0, 1)">Primary key of the entity</span><span style="color: rgba(128, 128, 128, 1)"></typeparam></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span> MongoDbRepositoryBase<TEntity, TPrimaryKey> : AbpRepositoryBase<TEntity, TPrimaryKey>
<span style="color: rgba(0, 0, 255, 1)">where</span> TEntity : <span style="color: rgba(0, 0, 255, 1)">class</span>, IEntity<TPrimaryKey><span style="color: rgba(0, 0, 0, 1)">
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">virtual</span><span style="color: rgba(0, 0, 0, 1)"> MongoDatabase Database
{
</span><span style="color: rgba(0, 0, 255, 1)">get</span> { <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> _databaseProvider.Database; }
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">virtual</span> MongoCollection<TEntity><span style="color: rgba(0, 0, 0, 1)"> Collection
{
</span><span style="color: rgba(0, 0, 255, 1)">get</span><span style="color: rgba(0, 0, 0, 1)">
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> _databaseProvider.Database.GetCollection<TEntity>(<span style="color: rgba(0, 0, 255, 1)">typeof</span><span style="color: rgba(0, 0, 0, 1)">(TEntity).Name);
}
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">readonly</span><span style="color: rgba(0, 0, 0, 1)"> IMongoDatabaseProvider _databaseProvider;
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> MongoDbRepositoryBase(IMongoDatabaseProvider databaseProvider)
{
_databaseProvider </span>=<span style="color: rgba(0, 0, 0, 1)"> databaseProvider;
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">override</span> IQueryable<TEntity><span style="color: rgba(0, 0, 0, 1)"> GetAll()
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Collection.AsQueryable();
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)"> TEntity Get(TPrimaryKey id)
{
</span><span style="color: rgba(0, 0, 255, 1)">var</span> query = MongoDB.Driver.Builders.Query<TEntity>.EQ(e =><span style="color: rgba(0, 0, 0, 1)"> e.Id, id);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> entity =<span style="color: rgba(0, 0, 0, 1)"> Collection.FindOne(query);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (entity == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(0, 0, 255, 1)">throw</span> <span style="color: rgba(0, 0, 255, 1)">new</span> EntityNotFoundException(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">There is no such an entity with given primary key. Entity type: </span><span style="color: rgba(128, 0, 0, 1)">"</span> + <span style="color: rgba(0, 0, 255, 1)">typeof</span>(TEntity).FullName + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">, primary key: </span><span style="color: rgba(128, 0, 0, 1)">"</span> +<span style="color: rgba(0, 0, 0, 1)"> id);
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> entity;
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)"> TEntity FirstOrDefault(TPrimaryKey id)
{
</span><span style="color: rgba(0, 0, 255, 1)">var</span> query = MongoDB.Driver.Builders.Query<TEntity>.EQ(e =><span style="color: rgba(0, 0, 0, 1)"> e.Id, id);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Collection.FindOne(query);
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)"> TEntity Insert(TEntity entity)
{
Collection.Insert(entity);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> entity;
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)"> TEntity Update(TEntity entity)
{
Collection.Save(entity);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> entity;
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> Delete(TEntity entity)
{
Delete(entity.Id);
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> Delete(TPrimaryKey id)
{
</span><span style="color: rgba(0, 0, 255, 1)">var</span> query = MongoDB.Driver.Builders.Query<TEntity>.EQ(e =><span style="color: rgba(0, 0, 0, 1)"> e.Id, id);
Collection.Remove(query);
}
}</span></pre>
</div>
<p>添加 MongoDbUnitOfWork.cs </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> Implements Unit of work for MongoDB.
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MongoDbUnitOfWork : UnitOfWorkBase, ITransientDependency
{
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> Gets a reference to MongoDB Database.
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> MongoDatabase Database { <span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">; }
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">readonly</span><span style="color: rgba(0, 0, 0, 1)"> IAbpMongoDbModuleConfiguration _configuration;
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> Constructor.
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> MongoDbUnitOfWork(
IAbpMongoDbModuleConfiguration configuration,
IConnectionStringResolver connectionStringResolver,
IUnitOfWorkFilterExecuter filterExecuter,
IUnitOfWorkDefaultOptions defaultOptions)
: </span><span style="color: rgba(0, 0, 255, 1)">base</span><span style="color: rgba(0, 0, 0, 1)">(
connectionStringResolver,
defaultOptions,
filterExecuter)
{
_configuration </span>=<span style="color: rgba(0, 0, 0, 1)"> configuration;
BeginUow();
}
</span><span style="color: rgba(0, 0, 255, 1)">#pragma</span> warning disable
<span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> BeginUow()
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">TODO: MongoClientExtensions.GetServer(MongoClient)' is obsolete: 'Use the new API instead.</span>
Database = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MongoClient(_configuration.ConnectionString)
.GetServer()
.GetDatabase(_configuration.DatabaseName);
}
</span><span style="color: rgba(0, 0, 255, 1)">#pragma</span> warning restore
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> SaveChanges()
{
}
</span><span style="color: rgba(0, 0, 255, 1)">#pragma</span> warning disable 1998
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)"> async Task SaveChangesAsync()
{
}
</span><span style="color: rgba(0, 0, 255, 1)">#pragma</span> warning restore 1998
<span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> CompleteUow()
{
}
</span><span style="color: rgba(0, 0, 255, 1)">#pragma</span> warning disable 1998
<span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)"> async Task CompleteUowAsync()
{
}
</span><span style="color: rgba(0, 0, 255, 1)">#pragma</span> warning restore 1998
<span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> DisposeUow()
{
}
}</span></pre>
</div>
<p>添加 UnitOfWorkMongoDatabaseProvider.cs</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> Implements </span><span style="color: rgba(128, 128, 128, 1)"><see cref="IMongoDatabaseProvider"/></span><span style="color: rgba(0, 128, 0, 1)"> that gets database from active unit of work.
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> UnitOfWorkMongoDatabaseProvider : IMongoDatabaseProvider, ITransientDependency
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> MongoDatabase Database { <span style="color: rgba(0, 0, 255, 1)">get</span> { <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> _mongoDbUnitOfWork.Database; } }
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">readonly</span><span style="color: rgba(0, 0, 0, 1)"> MongoDbUnitOfWork _mongoDbUnitOfWork;
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> UnitOfWorkMongoDatabaseProvider(MongoDbUnitOfWork mongoDbUnitOfWork)
{
_mongoDbUnitOfWork </span>=<span style="color: rgba(0, 0, 0, 1)"> mongoDbUnitOfWork;
}
}</span></pre>
</div>
<p>添加 IMongoDatabaseProvider.cs</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> IMongoDatabaseProvider
{
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> Gets the </span><span style="color: rgba(128, 128, 128, 1)"><see cref="MongoDatabase"/></span><span style="color: rgba(0, 128, 0, 1)">.
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
MongoDatabase Database { <span style="color: rgba(0, 0, 255, 1)">get</span><span style="color: rgba(0, 0, 0, 1)">; }
}</span></pre>
</div>
<p>添加 TexHong_EMWXMongoDBModule.cs</p>
<p> </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> This module is used to implement "Data Access Layer" in MongoDB.
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> TexHong_EMWXMongoDBModule : AbpModule
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> PreInitialize()
{
IocManager.Register</span><IAbpMongoDbModuleConfiguration, AbpMongoDbModuleConfiguration><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 配置 MonggoDb 数据库地址与名称</span>
IAbpMongoDbModuleConfiguration abpMongoDbModuleConfiguration =<span style="color: rgba(0, 0, 0, 1)"> Configuration.Modules.AbpMongoDb();
abpMongoDbModuleConfiguration.ConnectionString </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mongodb://admin:123qwe@118.126.93.113:27017/texhong_em</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
abpMongoDbModuleConfiguration.DatabaseName </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">texhong_em</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> Initialize()
{
IocManager.RegisterAssemblyByConvention(</span><span style="color: rgba(0, 0, 255, 1)">typeof</span><span style="color: rgba(0, 0, 0, 1)">(TexHong_EMWXMongoDBModule).GetAssembly());
IocManager.Register</span><MongoDbRepositoryBase<User, <span style="color: rgba(0, 0, 255, 1)">long</span>>><span style="color: rgba(0, 0, 0, 1)">();
}
}</span></pre>
</div>
<p>最后项目的架构</p>
<p><img src="https://img2018.cnblogs.com/blog/1428124/201909/1428124-20190914115551484-1245025969.png"></p>
<p> </p>
<p> </p>
<p> </p>
<p>添加单元测试 MongoDbAppService_Tests.cs </p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MongoDbAppService : TexHong_EMWXTestBase
{
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">readonly</span> MongoDbRepositoryBase<User,<span style="color: rgba(0, 0, 255, 1)">long</span>><span style="color: rgba(0, 0, 0, 1)"> _mongoDbUserRepositoryBase;
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> MongoDbAppService()
{
</span><span style="color: rgba(0, 0, 255, 1)">this</span>._mongoDbUserRepositoryBase = Resolve<MongoDbRepositoryBase<User, <span style="color: rgba(0, 0, 255, 1)">long</span>>><span style="color: rgba(0, 0, 0, 1)">();
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">async</span><span style="color: rgba(0, 0, 0, 1)"> Task CreateUsers_Test()
{
</span><span style="color: rgba(0, 0, 255, 1)">long</span> Id = (DateTime.Now.Ticks - <span style="color: rgba(128, 0, 128, 1)">621356256000000000</span>) / <span style="color: rgba(128, 0, 128, 1)">10000</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">await</span> _mongoDbUserRepositoryBase.InsertAndGetIdAsync(<span style="color: rgba(0, 0, 255, 1)">new</span> User() { Id= Id, Name = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">123</span><span style="color: rgba(128, 0, 0, 1)">"</span>, EmailConfirmationCode = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">1111</span><span style="color: rgba(128, 0, 0, 1)">"</span>, UserName = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2222</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> });
User user </span>=<span style="color: rgba(0, 0, 0, 1)"> _mongoDbUserRepositoryBase.Get(Id);
}
}</span></pre>
</div>
<p>注意单元测试要引用 MongoDb项目。</p>
<p>同时在TestModule.cs属性依赖 DependsOn 把Mongodb 的 Module添加进去,不然会导致运行失败无法注入。</p>
<p><img src="https://img2018.cnblogs.com/blog/1428124/201909/1428124-20190914121041494-1059399615.png"></p>
<p> </p>
<p>源码下载:https://download.csdn.net/download/liaoyide/11742718</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/liaoyd/p/11514672.html
頁:
[1]