鲍鲍鱼 發表於 2019-9-14 12:13:00

ABP 结合 MongoDB 集成依赖注入

<p>1.我们再ABP项目添加一个.NET Core类库&nbsp; 类库名自定定义, 我这里定义为&nbsp;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>&nbsp;</p>
<p>&nbsp;</p>
<p>添加&nbsp;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)">&lt;summary&gt;</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)">&lt;see cref="IModuleConfigurations"/&gt;</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)">&lt;/summary&gt;</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)">&lt;summary&gt;</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)">&lt;/summary&gt;</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&lt;IAbpMongoDbModuleConfiguration&gt;<span style="color: rgba(0, 0, 0, 1)">();
      }
    }</span></pre>
</div>
<p>添加&nbsp;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>添加&nbsp;&nbsp;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>&nbsp;</p>
<p>添加&nbsp;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)">&lt;summary&gt;</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)">&lt;/summary&gt;</span>
    <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;typeparam name="TEntity"&gt;</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)">&lt;/typeparam&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span> MongoDbRepositoryBase&lt;TEntity&gt; : MongoDbRepositoryBase&lt;TEntity, <span style="color: rgba(0, 0, 255, 1)">int</span>&gt;, IRepository&lt;TEntity&gt;
      <span style="color: rgba(0, 0, 255, 1)">where</span> TEntity : <span style="color: rgba(0, 0, 255, 1)">class</span>, IEntity&lt;<span style="color: rgba(0, 0, 255, 1)">int</span>&gt;<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)">&lt;summary&gt;</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)">&lt;/summary&gt;</span>
    <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;typeparam name="TEntity"&gt;</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)">&lt;/typeparam&gt;</span>
    <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;typeparam name="TPrimaryKey"&gt;</span><span style="color: rgba(0, 128, 0, 1)">Primary key of the entity</span><span style="color: rgba(128, 128, 128, 1)">&lt;/typeparam&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span> MongoDbRepositoryBase&lt;TEntity, TPrimaryKey&gt; : AbpRepositoryBase&lt;TEntity, TPrimaryKey&gt;
      <span style="color: rgba(0, 0, 255, 1)">where</span> TEntity : <span style="color: rgba(0, 0, 255, 1)">class</span>, IEntity&lt;TPrimaryKey&gt;<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&lt;TEntity&gt;<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&lt;TEntity&gt;(<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&lt;TEntity&gt;<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&lt;TEntity&gt;.EQ(e =&gt;<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&lt;TEntity&gt;.EQ(e =&gt;<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&lt;TEntity&gt;.EQ(e =&gt;<span style="color: rgba(0, 0, 0, 1)"> e.Id, id);
            Collection.Remove(query);
      }
    }</span></pre>
</div>
<p>添加&nbsp;MongoDbUnitOfWork.cs&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</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)">&lt;/summary&gt;</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)">&lt;summary&gt;</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)">&lt;/summary&gt;</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)">&lt;summary&gt;</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)">&lt;/summary&gt;</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>添加&nbsp;&nbsp;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)">&lt;summary&gt;</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)">&lt;see cref="IMongoDatabaseProvider"/&gt;</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)">&lt;/summary&gt;</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>添加&nbsp;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)">&lt;summary&gt;</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)">&lt;see cref="MongoDatabase"/&gt;</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)">&lt;/summary&gt;</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>添加&nbsp;TexHong_EMWXMongoDBModule.cs</p>
<p>&nbsp;&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</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)">&lt;/summary&gt;</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>&lt;IAbpMongoDbModuleConfiguration, AbpMongoDbModuleConfiguration&gt;<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>&lt;MongoDbRepositoryBase&lt;User, <span style="color: rgba(0, 0, 255, 1)">long</span>&gt;&gt;<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>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>添加单元测试&nbsp;&nbsp;MongoDbAppService_Tests.cs&nbsp;</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&lt;User,<span style="color: rgba(0, 0, 255, 1)">long</span>&gt;<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&lt;MongoDbRepositoryBase&lt;User, <span style="color: rgba(0, 0, 255, 1)">long</span>&gt;&gt;<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属性依赖&nbsp;DependsOn 把Mongodb 的&nbsp;Module添加进去,不然会导致运行失败无法注入。</p>
<p><img src="https://img2018.cnblogs.com/blog/1428124/201909/1428124-20190914121041494-1059399615.png"></p>
<p>&nbsp;</p>
<p>源码下载:https://download.csdn.net/download/liaoyide/11742718</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/liaoyd/p/11514672.html
頁: [1]
查看完整版本: ABP 结合 MongoDB 集成依赖注入