【发布时间】:2017-07-12 17:07:55
【问题描述】:
我有一些如下形式的代码:
class DependsOnEnumerations : IDependsOnEnumerations{
IEnumerable<IDependsOnEnumerator> dependencies;
}
...
interface IDependsOnEnumerator{
}
...
class DependencyA: IDependsOnEnumerator{
IDependsOnEnumerations dependency;
}
...
class DependencyB: IDependsOnEnumerator{
IDependsOnEnumerations dependency;
}
...
我想使用 Autofac 来正确解决这种依赖关系,它是循环的并且有一个枚举。
到目前为止,我尝试将两组依赖项声明为属性:
class DependsOnEnumerations : IDependsOnEnumerations{
internal IEnumerable<IDependsOnEnumerator> dependencies { get; set;}
}
...
class DependencyA: IDependsOnEnumerator{
internal IDependsOnEnumerations dependency {get; set;}
}
...
然后在 Autofac 中注册
builder.registerType<DependsOnEnumerations>
.AsImplementedInterfaces()
.InstancePerLifetimeScope()
.PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);
builder.registerType<DependencyA>
.AsImplementedInterfaces()
.SingleInstance()
.PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);
builder.registerType<DependencyB>
.AsImplementedInterfaces()
.SingleInstance()
.PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);
...
这里发生的是 DependencyA 和 DependencyB 告诉我它们的依赖为空。
我也尝试过仅将其中一个声明为属性:
class DependsOnEnumerations : IDependsOnEnumerations{
private readonly IEnumerable<IDependsOnEnumerator> _dependencies;
internal DependsOnEnumerations(IEnumerable<IDependsOnEnumerator> dependencies){
_dependencies = dependencies;
}
}
...
class DependencyA: IDependsOnEnumerator{
internal IDependsOnEnumerations dependency {get; set;}
}
...
或
class DependsOnEnumerations : IDependsOnEnumerations{
internal IEnumerable<IDependsOnEnumerator> dependencies { get; set;}
}
...
class DependencyA: IDependsOnEnumerator{
private readonly IDependsOnEnumerations _dependency;
internal DependencyA(IDependsOnEnumerations dependency){
_dependency = dependency;
}
}
...
发生的情况是,在第一种情况下,可枚举为null,在第二种情况下,依赖项为null;即,无论做什么,似乎都没有正确解决。我有点不知所措如何解决这种依赖关系。
【问题讨论】: