具有隐式类型且没有默认值的键控注册

Keyed registration with implicit types and no defaults

当我使用 autofac 注册一个类型并使用 PreserveExistingDefaults 时,如果以前不存在该类型的注册,它会为 T 注册一个默认值。我知道这是它的意图,但有没有办法让它根本不注册默认值,但仍然注册隐式类型?

我的用例是我想 (1) 强制类型 T 的消费者依赖键控注册(即如果 [=11 抛出异常=] 在没有密钥过滤器的情况下被请求),并且 (2) 我还希望这些注册显示在 IEnumerable<T> 隐式注入中。

我在这个 answer 中看到我可以只添加一个 As<T> 注册来完成 (2),但它也注册了一个默认值,所以我不要得到 (1).

不幸的是,这不是 Autofac 地址的用例。

我可能认为设计中存在逻辑缺陷。如果开发人员无法在没有密钥的情况下解决单个 T,但他们可以在没有密钥的情况下解决 所有 T,那么人们将简单地解决这个问题通过解决所有这些问题并手动选择他们想要的一个。我建议重新审视这些要求,这样您就不会遇到您描述的情况。