我想声明一个类来搜索具有特定键的某些主题。首先,我已经声明了一个接口ISearch
interface ISearch
{
[Required(ErrorMessage = "Search key must be required.")]
string Key { get; set; }
Task<IEnumerable<TopicViewModels>> Search();
}
然后,我想通过使用Key
检查RequiredAttribute
是否为空。
我的问题:如果Key
为空,如何将错误消息抛给用户?
我不想这样使用:
Task<IEnumerable<TopicViewModels>> Search(string key)
{
if (!string.IsNullOrEmpty(key))
{
// start searching....
}
// throw error message
}
答案 0 :(得分:1)
抽象类是否适合您的情况?
public abstract class AbstractSearch
{
string _key = null;
public string Key
{
get
{
if (_key == null) throw new Exception("Key has not been set.");
return _key;
}
set
{
if (value == null) throw new ArgumentNullException("Key");
_key = value;
}
}
public abstract Task<IEnumerable<TopicViewModels>> Search();
}
public class MySearch : AbstractSearch
{
public override Task<IEnumerable<TopicViewModels>> Search()
{
string key = Key;
// Start searching...
}
}
答案 1 :(得分:1)
不继承接口成员属性! 见Attribute on Interface members does not work
如果您想要显示错误消息(而不是如何显示它),您可以使用反射。
((RequiredAttribute)((PropertyInfo)typeof(ISearch).GetMember("Key")).GetCustomAttribute(typeof(RequiredAttribute))).ErrorMessage;
不要使用该代码段,但它应该会给你一个想法。
答案 2 :(得分:0)
您必须将注释添加到具体类,即视图模型。您无法在界面上声明数据注释。
interface ISearch
{
string Key { get; set; }
Task<IEnumerable<TopicViewModels>> Search();
}
class MyViewModel : ISearch
{
[Required(ErrorMessage = "Search key must be required.")]
public string Key { get; set; }
public Task<IEnumerable<TopicViewModels>> Search()
{
}
}