具有 KeyFilter 属性的构造函数的 Autofac 配置

Autofac Configuration for constructor with KeyFilter attribute

我正在尝试使用 Autofac 配置来创建服务对象。

public class Service : IService
{
        public Service([KeyFilter("eod")]ISimpleMongoClient eodClient,
            [KeyFilter("live")]ISimpleMongoClient liveClient
            ) : base(config)
        {
            _eodClient = eodClient;
            _liveClient =  liveClient;
        }
}

public class SimpleMongoClient : ISimpleMongoClient
{
    public SimpleMongoClient(string connectionString, string database)
    {
        IMongoClient client = new MongoClient(connectionString);
        MongoDatabase = client.GetDatabase(database);
    }
}

不知何故,以下配置无法正确解析 ISimpleMongoClient 参数。我还缺少什么?

{
  "components": [
    {
      "type": "Service, TestProject",
      "services": [
        {
          "type": "IService, TestProject"
        }
      ],
      "instanceScope": "single-instance"
    },
    {
      "type": "SimpleMongoClient, TestProject",
      "services": [
        {
          "type": "ISimpleMongoClient, TestProject",
          "key": "eod"
        }
      ],
      "parameters": {
        "connectionString": "mongodb://localhost:27017/?readPreference=primary",
        "database": "eod"
      },
      "instanceScope": "single-instance"
    },
    {
      "type": "SimpleMongoClient, TestProject",
      "services": [
        {
          "type": "ISimpleMongoClient, TestProject",
          "key": "live"
        }
      ],
      "parameters": {
        "connectionString": "mongodb://localhost:27017/?readPreference=primary",
        "database": "live"
      },
      "instanceScope": "single-instance"
    }
  ]
}

要使用 KeyFilter 属性,您需要注册执行过滤 with the WithAttributeFiltering() 扩展的东西。你不能通过配置来做到这一点。