다음 추상 클래스 디자인을 사용하고 있습니다. 우리 요구 사항을보다 강력하게 적용하거나 ControllerBase 구현을 단순화하는 측면에서 개선을 제안 할 수 있는지 궁금합니다.이 일반 추상 클래스를 향상 시키십시오.
//Dependency Provider base
public abstract class ControllerBase<TContract, TType> where TType : TContract, class
{
public static TContract Instance
{
get {
return ComponentFactory.GetComponent<TContract, TType>();
}
}
public TContract GetComponent<TContract, TType>() where TType : TContract, class
{
component = (TType)Activator.CreateInstance(typeof(TType), true);
RegisterComponentInstance<TContract>(component);
}
}
//Contract
public interface IController
{
void DoThing();
}
//Actual Class Logic
public class Controller: ControllerBase<IController,Controller>
{
public void DoThing();
//internal constructor
internal Controller(){}
}
//Usage
public static void Main()
{
Controller.Instance.DoThing();
}
다음 사실은 항상 진실해야
TType
항상TContract
TContract
가 인터페이스해야합니다 (일반적인 제약 조건을 사용하여 강제)를 구현해야합니다 (찾을 수없는 집행 방법)TType
public constructor를 가지지 않아야합니다. 내부적 인 것만 있으면,ControllerBase
을 사용하는 것을 강제 할 방법이 있습니까?TType
구체적인 클래스를해야합니다
TContract를 적용하는 것은 말도 안되는 것처럼 보입니다. 나를 틀리게하지 말라. 그러나 인터페이스는 인스턴스화 될 수 없다. 그들을 단순한 계약으로 이해하고, 더 이상 아무것도, 그들은 행동을 (주로) 시행합니다. 그러나 그들은 형식도 수업도 아닙니다. 왜 그것이 인터페이스가되는지 설명해야합니다. –
미안하지만 왜 내가 인터페이스를 말했는지 모르겠다. 나는 추상적 인 클래스를 의미했다. –
왜 작동하지 않는지 상세히 설명하겠습니까? –