我希望得到如下服务
public SomeService(IMongoDatabase mongoDatabase) {
DB = mongoDatabase;
}
我想使用工厂来解析IMongoDatabase,只是为了封装IConfiguration的用法
public static IMongoDatabase GetMongoDatabase(IConfiguration config)
{
var connectionString = config.Get("SomeConnectionString");
// MongoClient handles connection pooling internally
var client = new MongoClient(connectionString);
var db = client.GetDatabase(config.Get("SomeDbName"));
return db;
}
我无法弄清楚如何处理注册,以便在任何类需要IMongoDatabase时调用MongoDbFactory.GetMongoDatabase. IConfiguration已经注册.
我真的很想使用IMongoDatabase而不是Func< IConfiguration,IMongoDatabase>在我的服务中.后者似乎过于迟钝,要求消费者实施我应该能够为他们实施的步骤.
解决方法:
您可以注册静态GetMongoDatabase工厂方法,如下所示:
builder.Register(c => MongoDbFactory.GetMongoDatabase(c.Resolve<IConfiguration>)())
.As<IMongoDatabase>();
顺便说一句,使用静态方法可能会引入一些问题,最好注册MongoDbFactory类并在工厂注册中使用它.
builder.RegisterType<MongoDbFactory>()
.AsSelf();
builder.Register(c => c.Resolve<MongoDbFactory>().GetMongoDatabase())
.As<IMongoDatabase>();
当然,您需要调整MongoDbFactory实现以使其工作 – 通过为Configuration添加属性并向构造函数添加IConfiguration.