【发布时间】:2010-05-14 17:38:09
【问题描述】:
我有以下抽象类设计,我想知道是否有人可以提出任何改进,以加强我们的要求执行或简化 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不应该有公共构造函数,只是一个内部构造函数,有没有办法使用ControllerBase来强制执行它?TType必须是具体类(不包括 New() 作为通用约束,因为构造函数应标记为内部)
【问题讨论】:
-
强制 TContract 作为一个接口似乎是无稽之谈。不要误会我的意思,但是接口不能被实例化。将它们理解为仅仅是合同,仅此而已,它们(主要)仅强制执行行为。但它们不是类型,也不是类。您应该尝试解释为什么您希望它成为界面。
-
对不起,我不知道为什么我说接口,我是说抽象类
-
您能否详细说明为什么它不起作用?
-
我们已经使用了一段时间了,我只是在寻找一种改进它的方法。
-
如果你说的是GetComponent那么可能是这样,它实际上是在另一个类中,我只是把它放在那里以简化问题。