技术开发 频道

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


   下一个问题就是:依靠方案,隐藏成员,使其不出现在属性浏览器中。隐藏公共属性通常包括创建一个属性。

[Browsable(false)] 
public ComponentCollection Components
   简单地隐藏这个BaseController成员,使其不出现在属性浏览器中。有时候,我们想隐藏一个成员,既不想它出现在属性浏览器中,也不想它出现在智能感知中,例如:对于那些能被生成代码利用的成员,我们把它们创建成公共的,但是我们要为用户隐藏这些代码。其中一个例子就是Get/Set方法,Get/Set方法是作为属性提供程序实现而工作的。类型用户完全不应该看到它们,因为它们仅仅与集成开发环境和面向方面的程序设计模式相关。使用另一个属性,我们可以完成这一过程。

[EditorBrowsable(EditorBrowsableState.Never)] 
public ViewInfo GetWinViewMapping(object target)
   依靠某种外部因素来有选择地隐藏属性不是一项简单的事情。只有控制器是根组件时,我们才谈到隐藏ConfiguredViews。我们为它创建了一个根设计器:

public class ControllerRootDesigner : ComponentDocumentDesigner 
{
protected override void PreFilterProperties(IDictionary properties)
{
base.PreFilterProperties(properties);
// Only show ConfiguredViews if the component is not the root component.
IDesignerHost host = (IDesignerHost)
GetService(typeof(IDesignerHost));
if (host.RootComponent == this.Component)
properties.Remove("ConfiguredViews");
}
}
    在基本ComponentDesigner中有许多可以被覆盖的成员,ComponentDocumentDesigner是从基本ComponentDesigner中继承来的。我们预过滤了属性,核对IDesignerHost.RootComponent,决定是否删除属性。GetService实现像平常一样向当前构件Site属性提出请求,再次指出这一点是非常值得的。

    集成开发环境为我们提供了一个嵌入式机制,以此来在应用程序配置文件中保存属性。通过DynamicProperties 种类下面的属性浏览器可以利用这个功能。然后会出现对话框,此对话框使构件属性能绑定到应用程序配置文件中appSettings章的一个键。我们用一个单属性ConnectionString实现一个IConnectable接口,ConnectionString的控制器以及模式可以用来发出信号——它们需要某种类型的一个连接点:

public interface IConnectable 
{
string ConnectionString { get; set; }
}

0
相关文章