我想做一些基本的控制器。在这个控制器中,我想拥有通用功能(创建、编辑、删除……)——每个控制器用于不同的模型,然后 BasicController 将与接口一起工作。
我想要在每个模型中实现的接口来访问常用功能:
public interface IModel
{
public int Id { get; set; }
public Task CreateAsync<T>(string userName, T model) where T: IModel;
public Task<bool> EditAsync<T>(string userName, T model) where T: IModel;
public bool CreateValidation();
public bool EditValidation();
}
然后我在一个模型中实现接口:
public class TestResult : IHasFile, IIsReserved, IModel
{
[Key]
public int Id { get; set; }
public async Task CreateAsync<T>(string resolverGID, T model) where T: TestResultModel
{
//do stuff
}
public async Task<bool> EditAsync<T>(string resolverGID,T model) where T: TestResultModel
{
//do stuff
}
...
}
public class TestResultModel : TestResult
{
[Display(Name = "ATTACHMENTS")]
public List<Microsoft.AspNetCore.Http.IFormFile> File { get; set; }
[Display(Name = "USED_STANDARDS")]
public string[] UsedStandardsAsArray { get; set; }
}
我想,当 TestResultModel 基于 TestResult 时,它也必须实现 IModel,但我得到错误:
<块引用>错误 CS0425 方法的类型参数 'T' 的约束 'TestResult.EditAsync(string, T)' 必须与以下约束匹配 接口方法 'IModel.EditAsync(string, T)'。考虑改用显式接口实现。
我尝试将界面更改为:
public interface IModel
{
public int Id { get; set; }
public Task CreateAsync<T>(string userName, T model) where T: class;
public Task<bool> EditAsync<T>(string userName, T model) where T: class;
public bool CreateValidation();
public bool EditValidation();
}
但仍然无法正常工作。
你知道如何处理这个问题吗?我做错了什么?
非常感谢您的提示。
编辑: 也试过:
public interface IModel
{
public int Id { get; set; }
public Task CreateAsync(string userName, IModel model);
public Task<bool> EditAsync(string userName, IModel model);
public bool CreateValidation();
public bool EditValidation();
}
然后:
public async Task CreateAsync(string resolverGID, TestResultModel model)
{
//do stuff
}
public async Task<bool> EditAsync(string resolverGID,TestResultModel model)
{
//do stuff
}
...
}
但是接口没有实现...