Autofac을 사용하여 다음 종속성 주입 시나리오를 달성하려고합니다.Autofac을 사용하여 속성 등록 연기
A, B, P의 세 클래스가 있다고 가정합니다. 클래스 A는 P 타입의 속성을 보유하고 있으며 런타임에 삽입해야하는 B에 대한 참조를 가지고 있습니다. 지금
class B
{
private P _p;
}
가장 중요한 세부 사항 : 동시에
class A
{
private B _b;
public P Prop { get; set; }
InitializeProp()
{ ... }
}
, 클래스 B는 P의 예에 따라 어떻게 든 것으로, P.의 인스턴스 그러나 B에 주입 할 필요가 인스턴스는 클래스 A에서 Prop이어야하며 A에서 InitializeProp()이 호출 된 후에 초기화됩니다. InitializeProp()은 A의 생성자보다 나중에 객체의 수명 시간에 호출 될 수 있다고 가정하십시오.
이 시나리오는 Autofac으로 구현할 수 있습니까? B가에 더 해결되면
내가 이런 일을 시도하지만 순환 참조 예외를 얻을, 아마도 :
containerBuilder.RegisterType<A>().SingleInstance();
containerBuilder.Register<Func<P>>(c =>
{
var a = c.Resolve<A>();
return() => a.Prop;
});
이상적 I : 다음 작업을 수행 할 수있는 메인 프로그램 지금
:
명시 적으로 P의Func
를 등록, 대신이 단순화 등록이 필요하지 않았다 당신이 제안한대로 클래스를 디자인하고, A와 B의 생성자를 통해 P를 주입합니다.그러나 제 실제 시나리오는 다른 종속성에 의해 제약을받으며 짧게 말해 A 클래스의 속성 P를 피할 수있는 방법이 없습니다.이 속성은 A의 수명 기간 중 특정 시점에서 초기화됩니다. A는 프로퍼티 P가 선언 된 인터페이스를 구현합니다. –