Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带枚举的Autofac循环依赖项_C#_Autofac - Fatal编程技术网

C# 带枚举的Autofac循环依赖项

C# 带枚举的Autofac循环依赖项,c#,autofac,C#,Autofac,我有以下形式的代码: class DependsOnEnumerations : IDependsOnEnumerations{ IEnumerable<IDependsOnEnumerator> dependencies; } ... interface IDependsOnEnumerator{ } ... class DependencyA: IDependsOnEnumerator{ IDependsOnEnumerations dependency; } ... c

我有以下形式的代码:

class DependsOnEnumerations : IDependsOnEnumerations{
  IEnumerable<IDependsOnEnumerator> dependencies;
}
...
interface IDependsOnEnumerator{
}
...
class DependencyA: IDependsOnEnumerator{
  IDependsOnEnumerations dependency;
}
...
class DependencyB: IDependsOnEnumerator{
  IDependsOnEnumerations dependency;
}
...
class DependsOnEnumerations:IDependsOnEnumerations{
可数依赖;
}
...
接口IDependsOnEnumerator{
}
...
类依赖项a:IDependsOnEnumerator{
IDependsOnEnumerations依赖项;
}
...
类依赖项B:IDependsOnEnumerator{
IDependsOnEnumerations依赖项;
}
...
我想使用Autofac来正确地解决这个依赖关系,它是循环的,并且有一个枚举

到目前为止,我尝试将两组依赖项声明为属性:

class DependsOnEnumerations : IDependsOnEnumerations{
  internal IEnumerable<IDependsOnEnumerator> dependencies { get; set;}
}
...
class DependencyA: IDependsOnEnumerator{
  internal IDependsOnEnumerations dependency {get; set;}
}
...
class DependsOnEnumerations:IDependsOnEnumerations{
内部IEnumerable依赖项{get;set;}
}
...
类依赖项a:IDependsOnEnumerator{
内部IDependsOnEnumerations依赖项{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);
...
builder.registerType
.AsImplementedInterfaces()
.InstancePerLifetimeScope()实例
.Properties自动连线(PropertyWiringOptions.AllowCirculardDependencies);
builder.registerType
.AsImplementedInterfaces()
.SingleInstance()
.Properties自动连线(PropertyWiringOptions.AllowCirculardDependencies);
builder.registerType
.AsImplementedInterfaces()
.SingleInstance()
.Properties自动连线(PropertyWiringOptions.AllowCirculardDependencies);
...
这里发生的是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{
私有只读IEnumerable\u依赖项;
内部依赖项枚举(IEnumerable依赖项){
_依赖关系=依赖关系;
}
}
...
类依赖项a:IDependsOnEnumerator{
内部IDependsOnEnumerations依赖项{get;set;}
}
...

class DependsOnEnumerations:IDependsOnEnumerations{
内部IEnumerable依赖项{get;set;}
}
...
类依赖项a:IDependsOnEnumerator{
私有只读IDependsOnEnumerations _依赖项;
内部依赖项cya(IDependsOnEnumerations依赖项){
_依赖=依赖;
}
}
...

在第一种情况下,可枚举项为null,在第二种情况下,依赖项为null;无论什么东西变成了财产,似乎都没有得到妥善解决。我有点不知所措,不知道如何解决这种依赖关系

PropertiesAutowired方法需要一个
Public
setter属性

class DependencyA: IDependsOnEnumerator{
  public IDependsOnEnumerations dependency {get; set;}
}
您可以在源代码中看到它(第48行)


顺便说一下,您应该真正重构您的设计,以避免循环依赖。这种依赖性将使代码更难理解。如果两个组件都需要对方,那么合并这些组件或创建第三个组件来打破这种循环依赖可能会更简单

class DependencyA: IDependsOnEnumerator{
  public IDependsOnEnumerations dependency {get; set;}
}