이 질문은 이상하게 보일 수 있지만 실제로 생성자 서명을 수정해야하는 경우가 있습니다.왜 C#에서 생성자의 서명을 제한 할 방법이 없습니까?
예를 들어 DI에서 의존성을 해결하기를 원합니다. 그리고 생성자가 확장되고 더 많은 매개 변수를 필요로하는 경우 일부는 상황에 따라 크게 달라 지므로 문제가 발생합니다.
DI 컨테이너가 종속성을 해결할 수없는 경우 예외가 발생하지만 이것이 내가 생각하는 최선의 방법은 아닙니다.
난 단지 우리의 응용 프로그램을 리팩토링하고, DI를위한 좋은 후보자가 될 것으로 계획되었던 것이 결과를 이해하지 못하는 의도적 인 생성자 확장으로 인해 지금 무너지고 있음을 이해합니다. 이를 막을 수있는 유일한 방법은 개발자 간의 컨벤션입니다.
언어 지원이 매우 유용 할 수 있지만 C#과 Java 모두 지원하지 않습니다.
그래서이 기능이 구현되지 않은 이유가 있어야한다고 생각합니다. 왜요? 여기
는 우리의 공장과 같은 모습입니다 : 추가 PARAMS 반면
public class EntityBase : IEntity
{
public EntityBase(IBusinessModel model, IAppContext context)
{
}
}
public class DescendatnEntity : EntityBase, IDescendatnEntity
{
public DescendatnEntity(IBusinessModel model, IAppContext context, ...additional params...)
{
}
}
public interface IEntitiesFactory
{
IEntity GetBaseEntity();
IDescendantEntity GetDescendantEntity(...those additional params...);
}
IBusinessModel
및 IAppContext
싱글은 일시적이다.
호출자 만이 일시적인 매개 변수 값을 알고있는 경우 팩토리가이 매개 변수에 대해 알 필요가 없습니다.
생성자를 선으로 가져 오면 궁극적으로 이들 클래스가 종속성을 갖게 될까요? – Jon
* 생성자 시그너처 고정 *은 무엇을 의미합니까? –
유형을 생성하는 데 사용할 수있는 팩토리 클래스를 작성하기 만하면됩니다. – Servy