在我的 .NET MVC 项目中,我有一个名为 User 的模型,当我在剃刀视图中时,它的类与 System.Security.Principal.IPrincipal.WebPageRenderingBase.User 冲突。(并且仅在剃刀视图内)。
有没有办法给我的班级一个不同的全局别名?或者更好的是,阻止这个 .NET 类出现?
我不想要一个冗长的解决方案。(前缀)有没有办法删除对这个愚蠢的用户属性的引用?
这是每个人的常见问题还是我的设置有问题?
在我的 .NET MVC 项目中,我有一个名为 User 的模型,当我在剃刀视图中时,它的类与 System.Security.Principal.IPrincipal.WebPageRenderingBase.User 冲突。(并且仅在剃刀视图内)。
有没有办法给我的班级一个不同的全局别名?或者更好的是,阻止这个 .NET 类出现?
我不想要一个冗长的解决方案。(前缀)有没有办法删除对这个愚蠢的用户属性的引用?
这是每个人的常见问题还是我的设置有问题?
只需将您的模型类从 重命名User
为Person
。每个解决方案都会以不必要的复杂性使您的代码膨胀。
另一件事:如果您使用名为User
99% 的类,则可以确定您在视图中使用模型,最好的方法是使用 ViewModel,您可以在其中收集需要传递给视图的所有数据。因此,在视图中,用户将成为该视图模型的一个属性。
这种方法还可以帮助您消除使用 ViewBags 和类似...
完全符合您的课程,即
MyNamespace.Core.User
而不仅仅是
User
虽然我有点困惑,因为
System.Security.Principal.IPrincipal.WebPageRenderingBase.User
是类型的属性而IPrincipal
不是称为的类型User
我通常会执行以下操作:
using m = MyProject.MyNameSpace.MySubNameSpace;
var u = new m.User();
这有点混合了@devlife 和@Romias 的答案。
通过实现using
别名,您可以将您的类“重命名”(在文件中定义的文件中)为您在语句中User
指定的内容。using
例如:
using Person = NameSpace.SubNameSpace.Classes.User
然后,您可以在定义此别名的文件中Person
用作您的类。User
请参阅:http: //msdn.microsoft.com/en-us/library/sf0df423 (v=vs.71).aspx
最后一节提供了一个完整的代码示例。
也许伟大的 Jon Skeet 有你的答案:
“ Visual Studio 8 中程序集引用的 Aliases 属性有什么用”:
这是针对“外部别名”的。假设您要使用两种不同的类型,它们都称为 Foo.Bar(即 Foo 命名空间中的 Bar)。这两种类型将位于不同的程序集中(根据定义) - 您使用 VS 中的属性将别名与每个引用关联,然后您可以执行以下操作:
extern alias FirstAlias; extern alias SecondAlias; using FirstBar = FirstAlias::Foo.Bar; using SecondBar = SecondAlias::Foo.Bar;
然后在您的代码中使用 FirstBar 和 SecondBar。
所以基本上它是一个额外的命名级别——除非你真的、真的必须这样做,否则你不应该使用它。它会让很多人感到困惑。一开始就尽量避免陷入这种情况——但在你无法避免的时候要注意这个解决方案。