22

我有一个用于 IoC 容器注册过程的流畅接口,其中包含一些用于构建注册的类。

例如,我可以这样做:

builder.Register<IFoo>().From.ConcreteType<Foo>();

但是,在点之后的每一步,智能感知都会弹出,显示 Object 类的四个标准方法,GetHashCode、Equals、GetType 和 ToString。

我尝试在几个类中覆盖这些方法,将EditorBrowsableAttribute属性附加到每个类,但它们仍然出现。我没有办法隐藏它们吗?

请注意,我并没有试图将它们隐藏在类本身中,只是从智能感知中隐藏。

基本上,我想要这样:

                         +---------------+
builder.Register<IFoo>().|As             |
                         |By             |
                         |Equals         | <-- remove this
                         |From           |
                         |GetHashCode    | <-- and this
                         |GetType        | <-- as well as this
                         |ToString       | <-- and finally this
                         +---------------+

这是我在从返回的类中尝试的内容Register<T>

[EditorBrowsable(EditorBrowsableState.Never)]
public override Boolean Equals(Object obj)
{
    return base.Equals(obj);
}

[EditorBrowsable(EditorBrowsableState.Never)]
public override Int32 GetHashCode()
{
    return base.GetHashCode();
}

[EditorBrowsable(EditorBrowsableState.Never)]
public override String ToString()
{
    return base.ToString();
}

这显然行不通。还有什么我可以尝试的吗?

我还尝试添加一个新方法,而不是从 覆盖Object,并对其应用相同的属性,这也显示出来了,所以很明显该属性没有做我认为它会做的事情。

我注意到文档中关于不要从同一个程序集中隐藏东西的注释,但我尝试创建一个新项目,它们仍然显示在那里。

4

2 回答 2

22

好的,我找到了解决方案,部分原因是我的错,部分原因是文档不完整。

我的错是我没有标记正确类中的所有方法,但即使更正了,方法仍然出现。

结果是文档中的注释,内容如下:

在 Visual C# 中,EditorBrowsableAttribute 不会禁止来自同一程序集中的类的成员。

实际上应该是(强调我的):

在 Visual C# 中,EditorBrowsableAttribute 不会禁止来自同一打开解决方案中的类的成员。

我在适当的类中标记了方法,进行了完全重建,在解决方案文件之外创建了一个新项目,对我的 IoC 项目中的编译文件进行了文件引用,你瞧,这些方法消失了。

如果其他人有这个问题,我会留下这个问题。

于 2009-09-24T19:57:30.100 回答
18

根据thread,这是设计使然。装饰EditorBrowsable(EditorBrowsableState.Never)有的方法/属性仅在它们是另一个引用程序集中的类的一部分时才对智能感知隐藏。该程序集不应属于同一解决方案。

于 2009-09-23T09:00:27.533 回答