我正在尝试使用ASPNET Core的新ODATA功能来公开我的应用程序中的数据。我的所有数据访问都通过一组公共基类公开,因此我不想创建50个不同的ODataController类,而是希望有一个公共类,并使用不同的类型参数对其进行实例化。我创建了我的公共类,但我不知道如何告诉ASPNETCORE使用反射创建一堆控制器。
有没有人有任何关于如何做到这一点的例子?我基本上希望能够编写如下代码:
ODataControllers.Add(new CommonApiController<MatterJson, IMatterCommand, MatterStorage, MatterApi>());
(当然我也会通过反思来自动化,我只是想以此为例)。
我的控制器类如下:
public class CommonApiController<TJson, TAdd1, TStorage, TApi> : ODataController
where TJson : class, IDResult, ITimestamped, new()
where TAdd1 : class, IApiCommand
where TStorage : RepositoryItem<TJson, TStorage>, new()
where TApi : CrudApi<TJson, TAdd1> {
public ICachedCrudApi<TJson, TAdd1, TStorage, TApi> API { get; private set; }
public CommonApiController(ICachedCrudApi<TJson, TAdd1, TStorage, TApi> API) {
this.API = API;
}
public virtual IEnumerable<TJson> Get(ODataQueryOptions<TJson> options) {
var settings = new ODataValidationSettings() {
AllowedQueryOptions = AllowedQueryOptions.All
};
options.Validate(settings);
var query = API.List().AsQueryable();
var results = options.ApplyTo(query);
return (results as IQueryable<TJson>).ToList();
}
public virtual async Task<TJson> Get([FromODataUri] long key) {
var query = await API.Get(key)
.DefaultAwait()
;
return query.Response;
}
}