簡體   English   中英

具有枚舉的Autofac循環依賴

[英]Autofac Circular Dependency With Enumeration

我有以下形式的一些代碼:

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告訴我它們的依賴關系為null。

我也嘗試過僅將其中之一聲明為屬性:

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;
  }
}
...

發生的情況是,在第一種情況下,可枚舉為n​​ull,在第二種情況下,依賴關系為null。 即,無論使財產成為似乎無法正確解決。 我有點不知如何解決這種依賴性。

PropertiesAutowired方法需要Public setter屬性。

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

您可以在DefaultPropertySelector.cs源代碼上看到它(第48行)


順便說一句,您應該真正重構設計以避免循環依賴。 這種依賴性會使您的代碼更難以理解。 如果兩個組件都需要,則合並這些組件或創建第三個組件來打破這種循環依賴關系可能會更簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM