【发布时间】:2014-08-01 11:39:23
【问题描述】:
在 MVC 应用程序中,我有一个包含特定模型类的命名空间。这个类实现了一个特定的接口,并且该接口有一个扩展类。
我将扩展类放在与模型类和接口相同的命名空间中,但是,除非我在视图中公开命名空间,否则扩展方法将无法在视图中工作。通过using 在每个实际要使用这些扩展方法的视图中添加命名空间不是一种选择。谢天谢地 I know how to globally add a namespace so it can be used inside all of views,但我有理由不向他们公开我的模型命名空间。
考虑到这一点,我正在考虑将扩展方法移动到不同的命名空间,这样我就可以安全地将其公开给我的所有视图,但现在所有有权访问模型命名空间的控制器都将丢失扩展。我不想将此命名空间添加到我的所有控制器中,而且这次我不想让这个命名空间全局可用。如果仅将模型命名空间暴露给代码,我确实希望扩展可用。
廉价的解决方案是将相同的扩展类添加到两个命名空间(换句话说,两个具有完全相同代码的 cs 文件)并完成它,但如果可能的话,我想使用更好的解决方案。
有一刻我以为我可以继承另一个命名空间中的扩展类,但这不起作用,因为静态类不能继承任何东西。
我也尝试使用this 解决方案,但它不起作用(至少对于扩展类)。我的意思是我公开了仅包含视图扩展的名称空间,但视图中的对象无权访问扩展方法。我还必须向命名空间添加一个虚拟类(否则应用程序甚至不会注意到命名空间)。
总而言之,我有一个扩展类,我需要在两个不同的命名空间中使用它。除了将所述类复制粘贴到另一个命名空间之外,还有其他方法可以实现这一点吗?
【问题讨论】:
标签: c# asp.net-mvc namespaces extension-methods