我想有相同的集合有时是可见的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>>();