나는 인스턴스화하고 반환해야하는 4 개의 서브 클래스 중 어느 것을 결정하는 팩토리 클래스를 가지고있다. 여러분이 기대하고있는 바와 같이, 모든 서브 클래스는 같은 인터페이스를 구현 :IoC를 통해 팩토리 클래스에 종속성을 제공합니까?
public static class FooFactory{
public IFoo CreateFoo(FooEnum enum){
switch (enum)
{
case Foo1:
return new Foo1();
case Foo2:
return new Foo2();
case Foo3:
return new Foo3(IBar);//has a constructor dependency on IBar
case Foo4:
return new Foo4();
default:
throw new Exception("invalid foo!");
}
}
}
당신이 볼 수 있듯이이, 서브 클래스 중 하나가 생성자에 정의 된 종속성이 있습니다. 관심의
몇 가지 포인트 :
- 우리는 우리의 IoC로 Spring.NET을 사용하고 있습니다.
IFoo
의 모든 하위 클래스는 도메인 객체이므로 Spring.NET에서 인스턴스화하지 않습니다. 가능한 한 이런 식으로 유지하고 싶습니다.- 응용 프로그램에는 손으로 작성된 데이터 액세스 레이어 (토큰)가 있으므로 여기에 ORM이 없습니다.
내가 가장 FooFactory
에서 Foo3
에 IBar
의존성을 전달하는 방법을 알아 내려고 노력하고있어. 나는 이것이 IoC를 통해 가장 잘 해결되는 문제 일지 모른다는 느낌을 얻지 만, 나는 어떻게 그럴 수 없는가. 또한 FooFactory
을 가능한 한 테스트 할 수있는 단위로 유지하고 싶습니다. 즉, 테스트 코드에서 Spring.NET에 대한 의존성을 가질 필요가 없다는 것을 선호합니다.
읽어 주셔서 감사합니다.
내가 삼촌 밥 그냥이 주제에 대한 악명 게시물을 것 같아요. http://davybrion.com/blog/2010/01/dependency-injection-inversion-rejection/ –