gpt4 book ai didi

c# - 如何使用工厂使用 Autofac 解析接口(interface)

转载 作者:太空狗 更新时间:2023-10-30 00:49:50 26 4
gpt4 key购买 nike

我想要像下面这样的服务

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;
}

我不知道如何处理注册,这样 MongoDbFactory.GetMongoDatabase每当任何类需要 IMongoDatabase 时都会被调用. 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 添加到构造函数。

关于c# - 如何使用工厂使用 Autofac 解析接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35853970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com