Здравствуйте,как сделать роутинг с параметром типа T (class)?
public class DocumentController : DbAccessController
{
[RoutePrefix("T/values")] //Where T - document name/tableEntityClass
[HttpGet]
public IHttpActionResult GetItem(Guid id)
{
return this.Ok(this._documentQueries.GetItem<T>(id));
}
}
Можно создать отдельный контроллер на каждый допустимый параметр:
class DocumentControllerBase<T> : DbAccessController {
[Route("values")]
[HttpGet]
public IHttpActionResult GetItem(Guid id)
{
return this.Ok(this._documentQueries.GetItem<T>(id));
}
}
[RoutePrefix("Foo")]
class FooDocumentController : DocumentControllerBase<Foo> {}
А можно и строкой принимать имя типа и превращать его в конкретную реализацию обобщенных методов через словарь и промежуточный слой абстракции:
interface IDocumentType {
object GetItem(IDocumentQueries q, Guid id);
}
class DocumentType<T> : IDocumentType {
public object GetItem(IDocumentQueries q, Guid id) {
return q.GetItem<T>(id);
}
}
class DocumentController : DbAccessController
{
private static Dictionary<string, IDocumentType> types = new Dictionary<string, IDocumentType>() {
{ "Foo", new DocumentType<Foo>() },
};
[Route("{T}/values")]
public IHttpActionResult GetItem(string T, Guid id)
{
return this.Ok(types[T].GetItem(this._documentQueries, id));
}
}
Ну и обычный switch точно никто не отменял.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости