在 Autofac 中将 ObservableCollection 注册为 self 和 IEnumerable<>会导致循环依赖异常



我想有相同的集合有时是可见的IEnumerable<T>,有时作为ObservableCollection<T>,但我得到一个Autofac错误:

检测到循环组件依赖

下面是我的代码:
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>>();

最新更新