技术开发 频道

深入观察 .NET组件模型及继承


【IT168 专稿】

    我们了解了属性扩展器的基本情况以及自定义代码序列化,下面继续学习MVC。

完成MVC的构建模型

   在我们的模式中,控制器包括模式。视图通过控制器访问模式。这些模式也是构件,这些构件则是控制器设计器内部的拖&曳。我们知道在表层中,默认设计器允许拖曳构件的任何类型。这就们所得到的。我们仅仅需要在控制器内使用模式,除了避免在控制器内拖曳模式外,也需要避免在内含包容内拖曳模式。

   完成控件此层的一个方法就是使用两个相联系的集成开发环境功能。一个功能是将自定义RootDesigner附加到基础控制器类型,而所有自定义控制器都从此基本控制器类别继承而来。

[Designer(typeof(ControllerRootDesigner), typeof( IRootDesigner))] 
public class BaseController : Component, IExtenderProvider
   另外一个方法就是在新的根设计器和BaseModel类型中都附加有ToolboxItemFilter,所有自定义模式都将从此BaseModel类型中继承。

[ToolboxItemFilter("Mvc.Components.Controller", ToolboxItemFilterType.Require)] 
public class ControllerRootDesigner : ComponentDocumentDesigner
{
public ControllerRootDesigner()
{
}
}
[ToolboxItemFilter("Mvc.Components.Controller", ToolboxItemFilterType.Require)]
public class BaseModel : Component
{
public override string ToString()
{
return _name;
}

public virtual string ModelName
{
get { return _name; }
set { _name = value; }
} string _name = "BaseModel";
}
    当现在的根设计器 和构件都有一个相匹配的字符串(第一个属性参数)时ToolboxItemFilterType.Require值告诉集成开发环境仅仅在工具栏中创建项目。这里有一篇有趣的文章,是关于属性值上不同的结合,以及工具栏带来的影响。

    BaseModel类型提供一个虚拟属性,此虚拟属性允许继承者为模式指定一个名称,视图映射将会引用这个名称。最后的一步就是,通过为它们补充下面的属性,我们能阻止这两个基本类型出现在工具栏中:
[ToolboxItem(false)]
    注意:此属性是可以继承的,如果派生类型想在工具栏中利用ToolboxItem(true)属性的话,派生出来的类型必须有一个ToolboxItem(true)属性。Usual OO程序设计建议创建基本类型,而开发者abstract没打算使用基本类型。因为当前集成开发环境需要能实例化构件来工作,我们不能使用我们的构件来完成这一过程。
0
相关文章