내 도메인에는 비즈니스 로직의 대부분을 수용하는 소수의 "프로세서"클래스가 있습니다. 기본 규칙으로 StructureMap을 사용하여 다양한 I/O (데이터베이스, 파일 시스템 등)에 대한 클래스에 리포지토리를 삽입합니다. 예를 들어 :StructureMap - 기본 클래스에 종속성 삽입?
public interface IHelloWorldProcessor
{
string HelloWorld();
}
public class HelloWorldProcessor : IHelloWorldProcessor
{
private IDBRepository _dbRepository;
public HelloWorldProcessor(IDBRepository dbRepository)
{
_dbRepository = dbrepository;
}
public string HelloWorld(){ return _dbRepository.GetHelloWorld(); }
}
지금, 나는 모든 프로세서를 사용할 수 있도록하고 싶습니다 일부 저장소있다, 그래서 나는이 같은 기본 클래스 제작 :
public class BaseProcessor
{
protected ICommonRepository _commonRepository;
public BaseProcessor(ICommonRepository commonRepository)
{
_commonRepository = commonRepository;
}
}
을하지만 내 다른 프로세서는 상속 할 때 그것으로부터, 제로 인수를 취하는 BaseProcessor에 대한 생성자가 없다는 각각의 컴파일러 오류가 발생합니다.
내가 여기서하려는 일을 할 수있는 방법이 있습니까? 즉, 다른 클래스가 각각에 주사를 쓰지 않고 사용할 수있는 기본 클래스에 공통 종속성을 주입시키는 것입니까?
나는 실제적인 피해가 없다고 생각합니다. 나는 조금 더 통합하려고했습니다. 코드를 조금 더 깨끗하게 만듭니다. 이제 모든 클래스의 생성자에 공통적 인 종속성을 포함 시키거나 기본 클래스의 종속성을 수동으로 인스턴스화하는 것 (생성자 인수가 아니라 ObjectFactory.GetInstance())이 필요합니다. 내 IoC 컨테이너를 추상화하여 두 번째 옵션을 좀 더 편안하게 만들 때가 된 것 같네요. – David
Nooooo ... 나쁜 길로 갈 것입니다. 당신이 생성자 매개 변수의 수에 불편을 느끼기 때문에 서비스 위치를 강요 할 수 있습니까? 제발 하지마. 공통 종속성의 수가 많으면 다른 서비스에 포함시켜야하는 몇 가지 공통 기능이있을 수 있습니다. 이 서비스는 여러 종속성을 취하고이를 필요로하는 작업을 수행합니다. 그런 다음 해당 서비스를 다른 생성자에 삽입합니다. 그것은 "상속에 대한 선호도 구성"이 의미하는 바입니다. –