我发现我认为可能是 Autofac 中的一个错误,但我想看看是否有人有可能的解决方案或解决方法,以便我可以完成这项工作。
基本上我已经设置了一个通用的装饰器,它工作得很好。问题是,一旦我BeginLifetimeScope()
使用配置委托进行调用,它就会错误地解析多个相同类型的组件。如果我不使用配置委托BeginLifetimeScope()
,那么它可以正常工作。不幸的是,我需要向我的子范围添加额外的依赖项,因此不使用配置委托不是一种选择。
这是一个演示该问题的示例:
var builder = new ContainerBuilder();
builder.RegisterType<Dependency>()
.Named<IDependency<object>>("service");
builder.RegisterGenericDecorator(
typeof(Decorator<>), typeof(IDependency<>), "service", "decorated");
var container = builder.Build();
// Returns 1
var scope1 = container.BeginLifetimeScope();
Console.WriteLine(
scope1.ResolveNamed<IEnumerable<IDependency<object>>>("decorated").Count());
// Returns 2 - notice the configAction doesn't even have to do anything
var scope2 = container.BeginLifetimeScope(r => { });
Console.WriteLine(
scope2.ResolveNamed<IEnumerable<IDependency<object>>>("decorated").Count());
这是我的假类型:
interface IDependency<T> { }
class Dependency : IDependency<object> { }
class Decorator<T> : IDependency<T> {}
任何帮助将不胜感激!