C# Autofac,覆盖范围内的所有注册

C# Autofac,覆盖范围内的所有注册,c#,dependency-injection,scope,autofac,C#,Dependency Injection,Scope,Autofac,我有一个容器,它是用T的多个实例构建的。 我这样解决它们: using(var scope = container.BeginLifeTimeScope()) { var allMyTs = scope.Resolve<IEnumerable<T>>(); } 使用(var scope=container.BeginLifeTimeScope()) { var allMyTs=scope.Resolve(); } 它工作得很好。 但是在特定的范围内,在某些情况

我有一个容器,它是用
T
的多个实例构建的。 我这样解决它们:

using(var scope = container.BeginLifeTimeScope())
{
    var allMyTs = scope.Resolve<IEnumerable<T>>();
}
使用(var scope=container.BeginLifeTimeScope())
{
var allMyTs=scope.Resolve();
}
它工作得很好。 但是在特定的范围内,在某些情况下,我希望能够用特定的实例覆盖所有的T。我已经知道有一个对BeginLiveTimeScope的覆盖,它可以为这个特定的注册提供一个
操作

所以我试过了

var specificT = new T();
using(var scope = container.BeginLifeTimeScope(a => {
    a.RegisterInstance(T).AsSelf().AsImplementedInterfaces();
    a.RegisterInstance(new List<T>{ specificT }).As<IEnumerable<T>>();
}))
{
    var allMyTs = scope.Resolve<IEnumerable<T>>();
}
var specificT=new T();
使用(var scope=container.BeginLifeTimeScope)(a=>{
a、 RegisterInstance(T.AsSelf().AsImplementedInterfaces();
a、 RegisterInstance(新列表{specificT}).As();
}))
{
var allMyTs=scope.Resolve();
}
在本例中,我希望allMyTs只包含specificT,但它不是,我得到了我所有注册的T和具体的T。
有人有这样的想法或实现过吗?

你不应该在这样的终身范围内注册东西。举个例子-我怀疑你想使用
ResolveNamed
。我发现这是在特定上下文中添加注册的唯一正确方法,因为容器的更新方法已被弃用,不推荐使用……你对我提供的链接有何看法<代码>但它不是。
你告诉我们它没有做什么?你能告诉我们它在做什么吗?我更新了我的问题。但是,我不知道注册命名实例如何解决我的问题,因为我不想修改范围内的代码。我在这里过度简化了这个例子,但比这个复杂得多。主要问题是能够用一个特定的实例覆盖一个类型的所有实例。您能告诉我们为什么使用服务定位器(即调用
.Resolve
而不是构造函数注入)吗?你可以展示一些不那么简单的代码吗?你不应该在像这样的生命周期范围内注册东西。举个例子-我怀疑你想使用
ResolveNamed
。我发现这是在特定上下文中添加注册的唯一正确方法,因为容器的更新方法已被弃用,不推荐使用……你对我提供的链接有何看法<代码>但它不是。你告诉我们它没有做什么?你能告诉我们它在做什么吗?我更新了我的问题。但是,我不知道注册命名实例如何解决我的问题,因为我不想修改范围内的代码。我在这里过度简化了这个例子,但比这个复杂得多。主要问题是能够用一个特定的实例覆盖一个类型的所有实例。您能告诉我们为什么使用服务定位器(即调用
.Resolve
而不是构造函数注入)吗?你能给我看一些不那么简单的代码吗?