2012年12月18日更新
由于这个问题似乎得到了不少观点,我应该指出,接受的答案不是我使用的解决方案,但它确实提供了构建解决方案的链接和资源,但在我看来,并非理想的解决方案.我的回答包含 MVC框架标准部分的替换 ; 并且你应该只使用那些,如果你觉得它们仍然适用于未来的版本(一些私有代码被从官方资源中删除,因为基类中没有足够的可扩展性).
但是,我可以确认这两个类也适用于Asp.Net MVC 4以及3.
我也可以重复Asp.Net Web API框架的类似实现,这是我最近所做的.
结束更新
我有一个类型,有很多'标准'验证(需要等),但也有一些自定义验证.
一些此验证需要抓住服务对象并使用其他属性之一作为关键字查找某些较低级别(即"模型层"下方)元数据.然后,元数据控制是否需要一个或多个属性以及这些属性的有效格式.
更具体一点 - 类型是卡片支付对象,简化为两个有问题的属性,如下所示:
public class CardDetails
{
public string CardTypeID { get; set; }
public string CardNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个服务:
public interface ICardTypeService
{
ICardType GetCardType(string cardTypeID);
}
Run Code Online (Sandbox Code Playgroud)
ICardType 然后包含不同的信息 - 这里的两个至关重要:
public interface ICardType
{
//different cards support one or more card lengths
IEnumerable<int> CardNumberLengths { get; set; }
//e.g. - implementation of the Luhn algorithm
Func<string, bool> CardNumberVerifier { get; …Run Code Online (Sandbox Code Playgroud)