c# – 如何使用工厂解析使用Autofac的界面

我希望得到如下服务

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.

上一篇:c# – Autofac – 如何在创建实例时获取类名


下一篇:jquery的上传控件uploadly,每行都有一个这样的控件对id选择器的使用