Контроллер WebAPI. Как добавить динамические методы? - PullRequest
0 голосов
/ 06 июня 2019

Мне нужно иметь возможность обслуживать дополнительные методы в моем универсальном контроллере, если контроллер реализует определенный интерфейс или имеет дополнительный атрибут или что-то в этом роде.Вот что у меня сейчас:

public abstract class AnimalController
{
    [HttpPost]
    public void Walk() { }
}

public class DogController : AnimalController
{
    [HttpPost]
    public void Bark() { }
}

public class CatController : AnimalController
{
    [HttpPost]
    public void Mew() { }
}

public class MutantController : DogController
{
    [HttpPost]
    public void Mew() { }
}

Mutant должен иметь способности как Dog, так и Cat, но C # не позволяет делать

public class MutantController : DogController, CatController
{
}

IИнтересно, что является лучшим способом решить эту проблему в контексте WebAPI?По сути, мне нужно добавить дополнительные веб-методы в зависимости от определенных способностей.Одним из решений является сделать что-то вроде этого:

public abstract class AnimalController
{
    [HttpPost]
    public void Walk() { }
}

public class DogController : AnimalController, ICanBark
{
    [HttpPost]
    public void Bark() { }
}

public class CatController : AnimalController, ICanMew
{
    [HttpPost]
    public void Mew() { }
}

public class MutantController : AnimalController, ICanMew, ICanBark
{
    [HttpPost]
    public void Bark() { }

    [HttpPost]
    public void Mew() { }
}

Это приведет к большому количеству дополнительного кода.Я подумал, может быть, некоторые добавят методы динамически, чтобы WebAPI знал, как использовать дополнительный контроллер, когда я размещаю атрибуты в главном?Или обрабатывает через методы по атрибуту?

[CanMew]
[CanBark]
public class MutantController : AnimalController
{
}
...