在 Autofac 中将 ObservableCollection 注册为 self 和 IEnumerable<> 会导致循环依赖异常
Registering ObservableCollection as self and as IEnumerable<> in Autofac causes circular dependency exception
我希望相同的集合有时显示为 IEnumerable<T>
,有时显示为 ObservableCollection<T>
,但我收到 Autofac 错误:
Circular component dependency detected
这是我的代码:
var builder = new ContainerBuilder();
builder.RegisterType<ObservableCollection<Foo>>()
.InstancePerLifetimeScope()
.AsSelf()
.As<IEnumerable<Foo>>();
using (var containter = builder.Build())
{
var foos = containter.Resolve<ObservableCollection<Foo>>();
}
Autofac 尝试使用 ObservableCollection<T>
的构造函数,该构造函数采用 IEnumerable<T>
类型的参数,这就是为什么你有循环依赖异常。
要解决此问题,您可以使用以下代码:
builder.Register(c => new ObservableCollection<IFoo>())
.InstancePerLifetimeScope()
.AsSelf()
.As<IEnumerable<IFoo>>();
或
builder.RegisterType<ObservableCollection<Foo>>()
.FindConstructorsWith(t => new[] { t.GetConstructor(Type.EmptyTypes) })
.InstancePerLifetimeScope()
.AsSelf()
.As<IEnumerable<Foo>>();
我希望相同的集合有时显示为 IEnumerable<T>
,有时显示为 ObservableCollection<T>
,但我收到 Autofac 错误:
Circular component dependency detected
这是我的代码:
var builder = new ContainerBuilder();
builder.RegisterType<ObservableCollection<Foo>>()
.InstancePerLifetimeScope()
.AsSelf()
.As<IEnumerable<Foo>>();
using (var containter = builder.Build())
{
var foos = containter.Resolve<ObservableCollection<Foo>>();
}
Autofac 尝试使用 ObservableCollection<T>
的构造函数,该构造函数采用 IEnumerable<T>
类型的参数,这就是为什么你有循环依赖异常。
要解决此问题,您可以使用以下代码:
builder.Register(c => new ObservableCollection<IFoo>())
.InstancePerLifetimeScope()
.AsSelf()
.As<IEnumerable<IFoo>>();
或
builder.RegisterType<ObservableCollection<Foo>>()
.FindConstructorsWith(t => new[] { t.GetConstructor(Type.EmptyTypes) })
.InstancePerLifetimeScope()
.AsSelf()
.As<IEnumerable<Foo>>();