구조체 맵에서 원형 의존성이 가장 단순합니다. 클래스 A는 생성자에서 클래스 B를 사용하고 클래스 B는 생성자에서 클래스 A를 사용합니다. 의존성을 없애기 위해 클래스 B를 클래스 A를 생성자 인수가 아닌 속성으로 가져 왔지만 구조체 맵은 여전히 불평합니다.StructureMap의 순환 종속성 - 속성 주입으로 손상 될 수 있습니까?
다른 DI 프레임 워크에서이 방법을 사용하여 순환 종속성이 손상된 것을 보았습니다 .-이 문제는 Structuremap과 관련이 있습니까? 아니면 잘못된 것입니까?
편집 :
x.For<IB>().Singleton().Use<B>().Setter(y => y.ArrayOfA).IsTheDefault();
그냥 내가 발생하는 다음과 같은 일련의 이벤트를 원 명확히하기 : 내가 그 클래스 B의 속성이처럼 유선 클래스 A의 인스턴스의 배열입니다 언급해야한다 :
- 생성자로 "B"를 주입, 작도의 "를"A의 인스턴스를 "B"
- 를 B의 인스턴스를 생성
- 세트 [ "A"]
에 "b.ArrayOfA"내가 원하는 모든이
편집 2 ... 가능하면에서 autowiring을 사용하여 발생합니다 : 여기 사용하는 간단한 예제 "양방향 종속성 문제가 RequestedType 검출 : IocTest2.ILoader ..."구성 원인을 검증
interface ILoader { }
interface ILoaderManager { }
class Loader : ILoader
{
public Loader(ILoaderManager lm) { }
}
class LoaderManager : ILoaderManager
{
public ILoader Loader { get; set; } // Was an array, but same circular dependency appears here
}
ObjectFactory.Configure
(
x =>
{
x.For<ILoader>.Singleton().Use<Loader>();
x.For<ILoaderManager>().Singleton().Use<LoaderManager>().OnCreation((c, a) => a.Loader = c.GetInstance<ILoader>());
}
);
:까지 명시 배선
안녕하세요 Joshua - 방금줬고 "Bidirectional Dependency Problem"이 있습니다 - 이것이 StructureMap의 순환 종속성의 신호라고 생각하십니까? StructureMap에 의한 객체의 구성 및 설정이 효과적으로 원 자적 참조가 해결 될 수 없습니까? 가능성은 낮지 만 지금까지는 작동하지 못했습니다 ... – Andy
양방향 종속성 문제는 순환 참조를 나타냅니다. 그러나 OnCreation 람다가 호출되기 전에 B의 인스턴스가 만들어지기 때문에 내가 제공 한 코드 샘플이 작동합니다. 그런 다음 B의 해당 인스턴스를 A의 생성자로 전달한 다음 B의 속성을 A로 설정할 수 있습니다. 위 코드를 테스트 한 결과 작동합니다. 순환 참조 문제가 계속 발생하면 언급하지 않은 다른 종속성이 있어야합니다. –
코드 예제를 사용할 때 StructureMap에서 B에 대한 setter 주입을 수행하도록 정책을 설정하면 안된다는 것을 분명히해야합니다. OnCreation 람다에서 수동으로 setter 주입을 수행하고 있습니다. –