Mark Seeman이 올바르게 처리했습니다. 그리고 나는 당신의 혼란에 동정합니다. 자동 종속성 주입 컨테이너를 사용하는 법을 배웠을 때 직접 경험했습니다. 문제는 객체를 설계하고 사용할 수있는 타당하고 합리적인 방법이 많다는 것입니다. 그러나 이러한 접근법 중 일부는 자동 종속성 인젝션 컨테이너에서 작동합니다.
내 개인의 역사 : 내가 유니티 또는 성 윈저 컨테이너와 같은 컨트롤 컨테이너의 반전을 사용하는 방법을 배웠습니다 오래 전에 객체 생성 및 제어의 반전의 OO 원칙을 배웠다. 나는이 같은 코드를 작성하는 습관을 획득 한이 설계에서
public class Foo
{
IService _service;
int _accountNumber;
public Foo(IService service, int accountNumber)
{
_service = service;
_accountNumber = accountNumber;
}
public void SaveAccount()
{
_service.Save(_accountNumber);
}
}
public class Program
{
public static void Main()
{
Foo foo = new Foo(new Service(),1234);
foo.Save();
}
}
을 내 푸 클래스는 데이터베이스에 계정을 저장하는 책임이있다. 그 일을하기 위해서는 계좌 번호와 더러운 일을하는 서비스가 필요합니다. 이것은 위에서 제공 한 concreted 클래스와 다소 비슷합니다. 여기서 각 객체는 생성자에서 고유 한 값을 사용합니다. 이 코드는 객체를 자신의 코드로 인스턴스화 할 때 잘 동작합니다. 적시에 적절한 값을 전달할 수 있습니다. 나는 자동 의존성 주입 컨테이너에 대해 알게되었을 때
그러나, 나는 손으로 푸의 인스턴스를 더 이상 것을 찾을 수 없습니다. 컨테이너는 나를 위해 생성자 인수를 인스턴스화합니다. 이것은 IService와 같은 서비스에 큰 편의를 제공했습니다. 그러나 정수와 문자열 등에서는 그렇게 잘 작동하지 않습니다. 이러한 경우 기본값 (정수의 경우 0과 같음)을 제공합니다.대신 나는 등 계좌 번호, 이름, 같은 상황에 특정 값 전달에 익숙한 ... 그래서 내가 이렇게 될 코딩과 디자인의 내 스타일을 조정했습니다했다 : 그것은 모두 나타납니다
public class Foo
{
IService _service;
public Foo(IService service)
{
_service = service;
}
public void SaveAccount(int accountNumber)
{
_service.Save(accountNumber);
}
}
public class Program
{
public static void Main()
{
Foo foo = new Foo(new Service());
foo.Save(1234);
}
}
Foo 클래스는 유효한 디자인입니다. 그러나 두 번째 버전은 자동 종속성 주입과 함께 사용할 수 있으며 첫 번째 버전은 자동 종속성 주입과 함께 사용할 수 없습니다.
어떻게 하드 코드하지 않고 설정 파일에 저장할 수 있습니까? –