到目前爲止,我有我的存儲庫下面的代碼:進樣MongDb與團結depencendy注射
public MyRepo(ILog logger)
{
this.Logger = logger;
var mongoUrlBuilder = new MongoUrlBuilder(ConfigurationManager.ConnectionStrings["MyContext"].ConnectionString);
this.MongoClient = new MongoClient(mongoUrlBuilder.ToMongoUrl());
this.MongoDatabase = this.MongoClient.GetDatabase("MyDB");
this.UserCollection = this.MongoDatabase.GetCollection<MyModel>("pro");
}
這就是我如何使用例如統一DI容器:
var container = new UnityContainer();
container.RegisterType<IMyModel, MyModel>();
RegisterTypes(container);
return container;
如何使用統一DI注入MongoDb?
我問的主要原因是因爲我想能夠模擬mongoDb並對其進行測試。這些要求要求我使用Unity DI和MongoDb。
UPDATE
最後,我去下面的百通。我加了Db的上下文類看起來像這樣:
public class MongoDbContext
{
public const string CONNECTION_STRING_NAME = "DBContext";
public const string DATABASE_NAME = "MyDb";
private static readonly IMongoClient Client;
private static readonly IMongoDatabase Database;
static MongoDbContext()
{
var connectionString = ConfigurationManager.ConnectionStrings[CONNECTION_STRING_NAME].ConnectionString;
Client = new MongoClient(connectionString);
Database = Client.GetDatabase(DATABASE_NAME);
}
public IMongoCollection<TEntity> GetCollection<TEntity>()
{
return Database.GetCollection<TEntity>(typeof(TEntity).Name.ToLower() + "s");
}
}
而且MongoRepository內使用它是這樣的:
public class MyRepository<TModel> : IGenericMongoRepository<TModel> where TModel : BaseModel
{
private MongoDbContext MongoDbContext = null;
public Exception OperationException { get; set; }
private ILog Logger;
public MyRepository(ILog logger)
{
this.Logger = logger;
this.MongoDbContext = new MongoDbContext();
}
public async Task<TModel> Add(TModel item)
{
try
{
IMongoCollection<TModel> collection = this.GetCollection<TModel>();
await collection.InsertOneAsync(item);
return item;
}
catch (Exception e)
{
}
}
}
wy沒有使用存儲庫模式,並在reposiotory中抽象邏輯 –
@BRAHIMKamel我可以得到一個例子嗎? 「MyRepo」實現了一個接口,我在其他地方使用MyRepo中的這個CRUD邏輯進行注入。 –
那麼,爲什麼你需要注入MongoDb,沒有多大意義AFAK –